在pyspark中.withColumn和.agg是并行计算的吗?

2024-06-26 14:13:58 发布

您现在位置:Python中文网/ 问答频道 /正文

举个例子

df.withColumn("customr_num", col("customr_num").cast("integer")).\
withColumn("customr_type", col("customr_type").cast("integer")).\
agg(myMax(sCollect_list("customr_num")).alias("myMaxCustomr_num"), \
    myMean(sCollect_list("customr_type")).alias("myMeanCustomr_type"), \
    myMean(sCollect_list("customr_num")).alias("myMeancustomr_num"),\
    sMin("customr_num").alias("min_customr_num")).show()

.withColumnagg中的函数列表(sMin、myMax、myMean等)是通过Spark并行计算还是按顺序计算?在

如果是顺序的,我们如何将它们并行化?在


Tags: 顺序typealiascolintegernumagglist
1条回答
网友
1楼 · 发布于 2024-06-26 14:13:58

本质上,只要有多个分区,操作总是在spark中并行化。如果您的意思是,如果withColumn操作将在数据集中一次计算,那么答案也是肯定的。一般来说,您可以使用Spark UI来了解更多关于计算事物的方式。在

让我们举一个和你的例子非常相似的例子。在

spark.range(1000)
    .withColumn("test", 'id cast "double")
    .withColumn("test2", 'id + 10)
    .agg(sum('id), mean('test2), count('*))
    .show

我们来看看用户界面。在

enter image description here

Range对应于数据的创建,然后有project(两个withColumn操作),然后是每个分区内的聚集(agg)(这里有2个)。在一个给定的分区中,这些操作是按顺序进行的,但对于所有分区来说,却是同时进行的。而且,它们处于同一阶段(在蓝色框中),这意味着它们都是在一次传递数据时计算出来的。在

然后是一个shuffle(exchange),这意味着数据在网络上交换(每个分区聚合的结果),最后的聚合被执行(HashAggregate),然后发送到驱动程序(collect

相关问题 更多 >