2016-01-31 105 views
0

创建JavaPairrRDD我有数据如下格式问题,而使用火花

Product1 
somelines... 
Iteam1 
Iteam2 

Product1 
somelines.... 
Iteam1 
Iteam3 

我需要对作为

(Product1:Item1,Item2) 
(Product1:Item1,Item3) 

我试着用下面的Java代码中创建它(更新了更多的理解)

public static void main(String[] args) { 
    SparkConf sparkConf = new SparkConf().setAppName("Analyzer").setMaster("local[2]").set("sparkexecutor","1g"); 
    JavaSparkContext ctx = new JavaSparkContext(sparkConf); 
    JavaPairRDD<String,String> lines = fetchProductData(ctx); 

    static JavaPairRDD<String, String> fetchProductData(JavaSparkContext ctx) { 
    JavaRDD<String> productLines = ctx.textFile("C:\\Service.log", 1); 
    System.out.println("called" + productLines); 
    JavaRDD<String[]> productLineMap = productLines.map(new Function<String, String[]>() { 
     String productname = ""; 
     @Override 
     public String[] call(String s) throws Exception { 
      System.out.println("test"+s); 
       Matcher m = PRODUCTREGEX.matcher(s); 
      if(m.find()){ 
       productname = m.group(1); 
       System.out.println("productname"+productname); 
      } 
      return s.split("\t"); 
     } 
    }); 

    JavaPairRDD<String, String> productMapKey = productLineMap.mapToPair(new PairFunction<String[], String, String>() { 
     @Override 
     public Tuple2<String, String> call(String[] strings) throws Exception { 
      String[] dataArray = strings[0].split(","); 
      String date_s = dataArray[5]; 
      return new Tuple2<String, String>(dataArray[4], "product"); 
     } 
    }); 
    return productMapKey; 
} 

}

但是我即使是在代码这种说法是不执行

System.out.println("test"+s); 

任何机构可以帮助我在创造对。我正在使用java

+0

你可以把这段代码放在完整的上下文中('main'方法)吗? – zero323

+0

@ zero323我更新了代码。 – sangita

回答

0
  • 您的调试语句未执行,因为您的驱动程序中没有任何操作,只有转换。 Spark很懒,它看到你根本不使用RDD,所以它不会计算它。
  • 我是否正确,您关于单一产品的数据分散在多行输入文件中?在这种情况下,我会在Spark之外预处理这些数据--Spark只有在排序后才具有单行命令的概念,否则很难甚至不可能(不确定)如何才能正确使用它。我会对该文件进行预处理,使所有关于产品的数据都以单行显示。即使在大量输入的情况下,这也不会成为问题,对于行的迭代器,只有少量的数据会立即加载到内存中。