【发布时间】:2017-04-21 03:18:06
【问题描述】:
我正在尝试做一个简单的 java spark 应用程序,它执行以下操作
输入数据csv格式:key1,key2,data1,data2
基本上我在这里要做的是,
首先我通过 key1 映射每一行,然后对该 rdd 执行 groupByKey 操作。
JavaRDD<String> viewRdd = sc.textFile("testfile.csv", 1);
JavaPairRDD<String, String> customerIdToRecordRDD = viewRdd
.mapToPair(w -> new Tuple2<String, String>(w.split(",")[0], w));
JavaPairRDD<String, Iterable<String>> groupedByKey1RDD = customerIdToRecordRDD.groupByKey();
System.out.println(customerIdToRecordGropedRDD.count());
现在我的问题是,我需要在 groupedByKey1RDD 的每个组上使用 key2 进行聚合。有什么方法可以将 Iterable 转换为 RDD 吗?还是我在这里遗漏了什么。我是新手,任何帮助都会
示例输入和预期输出:
id_1,time0,10,10
id_2,time1,0,10
id_1,time1,11,10
id_1,time0,1,10
id_2,time1,10,10
输出按第1列分组,然后按第2列聚合(聚合逻辑是简单地将column3和column相加):
id_1 : time0 : { sum1 : 11, sum2 : 20} ,
time1 : { sum1 : 11, sum2 : 10}
id_2 : time1 : { sum1 : 10, sum2 : 20}
【问题讨论】:
-
能否提供 csv 数据样本和预期输出?
-
@abaghel 添加了示例输入和输出
-
你使用的spark版本是什么?你想使用RDD吗,因为这很容易解决,并且使用Dataframe更易于管理。
标签: java apache-spark