2016-01-31 2 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 имел представление о порядке отдельных строк только после сортировки, было бы трудно или даже невозможно (не уверен), чтобы все было правильно. Я бы предварительно обработал этот файл, чтобы все данные о продукте отображались в одной строке. Это не будет проблемой даже при огромном входе, при этом итератор строк будет загружен в память только небольшое количество данных.
Смежные вопросы