我试图按键将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 lines = spark.read()
.textFile("C:/Users/91984/workspace/myApp/src/test/resources/in/urldata.txt");
2)使用空格拆分数据集
Encoder> encoder2 =
Encoders.tuple(Encoders.STRING(), Encoders.STRING());
Dataset> tupleRDD = lines.map(f->{
Tuple2<String, String> m =
new Tuple2<String, String>(f.split(" ")[0], f.split(" ")[1]);
return m;
},encoder2);
3)使用groupbyKey对密钥上的元组RDD数据库进行分组
KeyValueGroupedDataset> keygrpDS =
tupleRDD.groupByKey(f->f._1, Encoders.STRING());
有人可以解释一下为什么第3步中的groupByKey正在返回 KeyValueGroupedDataset>而不是KeyValueGroupedDataset>为了获得预期结果需要做什么改变。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这就是它与spark中的数据集一起使用的方式。当您拥有类型的数据集时Dataset,可以通过某个映射函数对其进行分组,该函数接受类型为T的对象并返回类型为K的对象(键)。你得到的是一个KeyValueGroupedDataset可以调用聚合函数的函数。在您的情况下,您可以使用mapGroups向您提供将键K和迭代映射Iterable到您选择的新对象R的函数。如果它有帮助,在你的代码中,T是一个Tuple2和K一个URL。