gpt4 book ai didi

scala - Spark 数据集中的 groupByKey

转载 作者:行者123 更新时间:2023-12-05 08:18:58 25 4
gpt4 key购买 nike

请帮助我理解在数据集上使用时传递给 groupByKey 的参数

scala> val data = spark.read.text("Sample.txt").as[String]
data: org.apache.spark.sql.Dataset[String] = [value: string]

scala> data.flatMap(_.split(" ")).groupByKey(l=>l).count.show

在上面的代码中,请帮助我理解groupByKey(l=>l)中的(l=>l)是什么意思。

最佳答案

l =>l 说使用整个字符串(在您的情况下,这是您在空间上标记化的每个单词)将用作键。这样你就可以得到同一分区中每个单词的所有出现次数,你可以计算它们。 - 正如您可能在其他文章中看到的那样,在这种情况下最好使用 reduceByKey,这样您就不需要在计算之前收集内存中每个键的所有值。

您需要一个从数据集的数据中导出 key 的函数。

在您的示例中,您的函数按原样获取整个字符串并将其用作键。另一个例子是,对于 Dataset[String],使用字符串的前 3 个字符而不是整个字符串作为键:

scala> val ds = List("abcdef", "abcd", "cdef", "mnop").toDS
ds: org.apache.spark.sql.Dataset[String] = [value: string]

scala> ds.show
+------+
| value|
+------+
|abcdef|
| abcd|
| cdef|
| mnop|
+------+

scala> ds.groupByKey(l => l.substring(0,3)).keys.show
+-----+
|value|
+-----+
| cde|
| mno|
| abc|
+-----+

键“abc”组将有 2 个值。

这里是 key 转换方式与 (l => l) 的区别,因此您可以看得更清楚:

scala> ds.groupByKey(l => l.substring(0,3)).count.show
+-----+--------+
|value|count(1)|
+-----+--------+
| cde| 1|
| mno| 1|
| abc| 2|
+-----+--------+


scala> ds.groupByKey(l => l).count.show
+------+--------+
| value|count(1)|
+------+--------+
| abcd| 1|
| cdef| 1|
|abcdef| 1|
| mnop| 1|
+------+--------+

关于scala - Spark 数据集中的 groupByKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42282154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com