2016-01-31 147 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只有在排序後才具有單行命令的概念,否則很難甚至不可能(不確定)如何才能正確使用它。我會對該文件進行預處理,使所有關於產品的數據都以單行顯示。即使在大量輸入的情況下,這也不會成爲問題,對於行的迭代器,只有少量的數據會立即加載到內存中。