Spark中的元素和分区有什么区别?

12 浏览
0 Comments

Spark中的元素和分区有什么区别?

我尝试过使用谷歌搜索,但找不到答案。\n引用自Apache Spark: map vs mapPartitions?\n

\nRDD的map和mapPartitions有什么区别?\nmap在元素级别使用函数,而\nmapPartitions在分区级别使用函数。\n

\n在这种情况下,元素级别是什么意思?它只是一个单独的行吗?

0
0 Comments

在Spark中,element(元素)和partition(分区)之间的区别是什么?

这个问题的出现是因为有人对Spark中的element和partition的概念感到困惑。为了解决这个问题,下面的内容进行了解释和讨论。

在通俗的说法中,我们有一个有10个架子的货架,然后有100个球,就像图片中所示。你会将10个球放在一个架子上,如此类推...100个球放在10个架子上,就像balldata.repartition(10)一样...这样数据就会均匀分布(而不是将所有100个球放在一个或两个架子上)。

现在,你不是对每个球(元素或行)应用任何逻辑,而是对每个架子(分区)应用逻辑一次。这就是区别。

在这种情况下,元素是球(一个单独的行),而分区是架子。

好处是,如果你正在进行繁重的初始化(比如打开数据库连接等),用于处理逻辑...你将为每个分区(架子)打开一个连接来应用逻辑,而不是为每个元素(球)打开数据库连接。

我建议你阅读给出的示例以更好地理解。

谢谢你的回答。我感到困惑的原因是,我正在尝试执行的map函数的结果返回一个元组列表。所以如果我执行rdd = sc.parallelize(data),然后res = rdd.map(self._prepricing),我的result.collect()[(0,1,2),(3,4,5),(6,7,8)]。元素是元组还是每个数字?

在这种情况下,元素是一个元组。

我明白了。也许这是另一个问题,但在你的结论中,mapPartitions转换比map更快,因为它一次调用你的函数/分区,而不是一次调用一个元素。那么常规的map有什么意义呢?你为什么不一次应用于多个元素?

常规的map仍然有意义,因为它可以对每个元素进行逐个处理,这在某些情况下可能是必要的。而mapPartitions则是在可以将逻辑应用于整个分区时的更高效的选择。

通过以上讨论,我们可以清楚地了解到element和partition的区别以及它们在Spark中的作用。

0