首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spark Group By Key to (String,Iterable<String>)

Spark Group By Key to (String,Iterable<String>)
EN

Stack Overflow用户
提问于 2018-11-25 01:31:40
回答 2查看 1.3K关注 0票数 0

我尝试按键对urldata进行分组,其中的值将是字符串

示例数据:

代码语言:javascript
运行
复制
url_3 url_2
url_3 url_2
url_3 url_1
url_4 url_3
url_4 url_1

预期结果:

代码语言:javascript
运行
复制
(url_3,(url_2,url_1))
(url_4,(url_3,url_1))

1)加载urldata:

代码语言:javascript
运行
复制
Dataset<String> lines = spark.read()
    .textFile("C:/Users/91984/workspace/myApp/src/test/resources/in/urldata.txt");

2)使用空格拆分数据集

代码语言:javascript
运行
复制
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数据库按键进行分组

代码语言:javascript
运行
复制
KeyValueGroupedDataset<String, Tuple2<String, String>> keygrpDS = 
    tupleRDD.groupByKey(f->f._1, Encoders.STRING());

有人能解释一下为什么步骤3中的groupByKey返回的是KeyValueGroupedDataset<String, Tuple2<String, String>>而不是KeyValueGroupedDataset<String, Iterable<String>>吗?为了获得预期的结果,需要做哪些更改?

EN

回答 2

Stack Overflow用户

发布于 2018-11-25 02:25:42

这就是它在spark中处理数据集的方式。当您有一个类型为Dataset<T>的数据集时,您可以通过某种映射函数对其进行分组,该映射函数接受类型T的对象并返回类型K(键)的对象。您得到的是一个可以在其上调用聚合函数的KeyValueGroupedDataset<K,T> (请参阅the javadoc)。在您的例子中,您可以使用mapGroups,您可以向它提供一个函数,将一个键K和一个可迭代的Iterable<T>映射到您选择的新对象R。如果有用的话,在你的代码中,T是一个Tuple2,K是一个URL。

票数 1
EN

Stack Overflow用户

发布于 2018-11-25 02:29:20

Spark要求您使用aggregation方法遵循您的groupBY。我会将tupleRDD作为DataFrame,如下所示:

代码语言:javascript
运行
复制
column1 column2

url_3 url_2
url_3 url_2
url_3 url_1
url_4 url_3
url_4 url_1

并像这样传递一个collect_list(column2)

df.groupBy('column1').agg('column2', collect_list('column2'))

这个例子是用Python编写的。不过,Scala/Java API应该是类似的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53460706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档