【发布时间】:2018-11-25 02:29:19
【问题描述】:
我正在尝试通过键对 urldata 进行分组,其中值将是字符串
样本数据:
url_3 url_2
url_3 url_2
url_3 url_1
url_4 url_3
url_4 url_1
预期结果:
(url_3,(url_2,url_1))
(url_4,(url_3,url_1))
1) 加载urldata:
Dataset<String> lines = spark.read()
.textFile("C:/Users/91984/workspace/myApp/src/test/resources/in/urldata.txt");
2) 使用空间分割数据集
Encoder<Tuple2<String, String>> encoder2 =
Encoders.tuple(Encoders.STRING(), Encoders.STRING());
Dataset<Tuple2<String, String>> tupleRDD = lines.map(f->{
Tuple2<String, String> m =
new Tuple2<String, String>(f.split(" ")[0], f.split(" ")[1]);
return m;
},encoder2);
3) 使用 groupbyKey 将 tupleRDD 数据库按 key 分组
KeyValueGroupedDataset<String, Tuple2<String, String>> keygrpDS =
tupleRDD.groupByKey(f->f._1, Encoders.STRING());
谁能解释一下为什么 groupByKey 在第 3 步返回 KeyValueGroupedDataset<String, Tuple2<String, String>> 而不是 KeyValueGroupedDataset<String, Iterable<String>> 以及为了获得预期结果需要做哪些更改。
【问题讨论】:
-
如果您仍然遇到问题,请接受正确的答案或说明任何问题。
标签: java apache-spark apache-spark-sql