【问题标题】:Issue while creating JavaPairrRDD using spark使用 spark 创建 JavaPairrRDD 时出现问题
【发布时间】:2016-05-08 23:56:56
【问题描述】:

我有以下格式的数据

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

【问题讨论】:

  • 你能把这段代码放在完整的上下文中吗(main 方法)?
  • @zero323 我已经更新了代码。

标签: java apache-spark mapreduce


【解决方案1】:
  • 您的调试语句未执行,因为您的驱动程序中没有任何操作,只有转换。 Spark 是懒惰的,它发现你根本不使用 RDD,所以它不会费心计算它。
  • 我说得对吗,您有关单个产品的数据分散在多行输入文件中?在这种情况下,我将在 Spark 之外对这些数据进行预处理——Spark 仅在排序后才有单行顺序的概念,很难甚至不可能(不确定)正确处理。我会预处理这个文件,使有关产品的所有数据都显示在单行中。即使输入很大也不会成为问题,使用行迭代器一次只会将少量数据加载到内存中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多