什么是 glom?它与 mapPartitions 有何不同?
What is a glom?. How it is different from mapPartitions?
我在 RDD 上遇到了 glom()
方法。根据文档
Return an RDD created by coalescing all elements within each partition into an array
glom
是跨分区随机移动数据还是仅 return 将分区数据作为数组?在后一种情况下,我相信使用 mapPartitions
.
可以达到同样的效果
我还想知道是否有任何用例受益于 glom
。
Does glom
shuffle the data across partitions
不,不是
If this is the second case I believe that the same can be achieved using mapPartitions
它可以:
rdd.mapPartitions(iter => Iterator(_.toArray))
但同样的事情适用于任何非洗牌转换,如 map
、flatMap
或 filter
。
if there are any use cases which benefit from glob.
需要以可遍历多次的形式访问分区数据的任何情况。
glom()
将每个分区转换为元素的元组(不可变列表)。它创建了一个 RDD
的元组。每个分区一个元组。
"... Glom()
通常,spark 不允许 worker 引用 RDD 的特定元素。
保持语言干净,但可能是一个主要限制。
glom() 将每个分区转换为元素的元组(不变列表)。
创建 tules 的 RDD。每个分区一个元组。
工作人员可以通过索引引用分区的元素。
但是你不能给元素赋值,RDD 仍然是不可变的。
现在我们可以理解上面用来统计每个分区中元素个数的命令了。
我们使用 glom()
将每个分区做成一个元组。
我们在每个分区上使用 len
来获取元组的长度 - 分区的大小。
* 我们collect
将结果打印出来。
glom() 函数 returns 通过将每个分区内的所有元素分组到一个列表(称为元组,因为它是一个不可变列表)创建的 RDD。
你可以这样排序 -
rdd = sc.parallelize([1, 2, 3, 4], 2) sorted(rdd.glom().collect()) [[1, 2], [3, 4]]
我在 RDD 上遇到了 glom()
方法。根据文档
Return an RDD created by coalescing all elements within each partition into an array
glom
是跨分区随机移动数据还是仅 return 将分区数据作为数组?在后一种情况下,我相信使用 mapPartitions
.
我还想知道是否有任何用例受益于 glom
。
Does
glom
shuffle the data across partitions
不,不是
If this is the second case I believe that the same can be achieved using mapPartitions
它可以:
rdd.mapPartitions(iter => Iterator(_.toArray))
但同样的事情适用于任何非洗牌转换,如 map
、flatMap
或 filter
。
if there are any use cases which benefit from glob.
需要以可遍历多次的形式访问分区数据的任何情况。
glom()
将每个分区转换为元素的元组(不可变列表)。它创建了一个 RDD
的元组。每个分区一个元组。
"... Glom()
通常,spark 不允许 worker 引用 RDD 的特定元素。
保持语言干净,但可能是一个主要限制。
glom() 将每个分区转换为元素的元组(不变列表)。
创建 tules 的 RDD。每个分区一个元组。
工作人员可以通过索引引用分区的元素。
但是你不能给元素赋值,RDD 仍然是不可变的。
现在我们可以理解上面用来统计每个分区中元素个数的命令了。
我们使用 glom()
将每个分区做成一个元组。
我们在每个分区上使用 len
来获取元组的长度 - 分区的大小。
* 我们collect
将结果打印出来。
glom() 函数 returns 通过将每个分区内的所有元素分组到一个列表(称为元组,因为它是一个不可变列表)创建的 RDD。
你可以这样排序 -
rdd = sc.parallelize([1, 2, 3, 4], 2) sorted(rdd.glom().collect()) [[1, 2], [3, 4]]