Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否在pyspark中并行计算.withColumn和.agg?_Python_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Python 是否在pyspark中并行计算.withColumn和.agg?

Python 是否在pyspark中并行计算.withColumn和.agg?,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,举个例子 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")).a

举个例子

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()
withColumn和agg sMin、myMax、myMean等中的函数列表是由Spark并行计算的,还是按顺序计算的


如果是顺序的,我们如何并行它们呢?

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

让我们举一个与你的例子非常相似的例子

spark.range1000 .withColumntest,“id铸双 .withColumntest2,'id+10 .aggsum'id,意思是'test2,count'* 显示 让我们看看用户界面

范围对应于数据的创建,然后您将两个withColumn操作和聚合agg投影到每个分区中,我们这里有2个分区。在给定的分区中,这些操作是按顺序完成的,但所有分区都是同时完成的。此外,它们在蓝色框中处于同一阶段,这意味着它们都是在数据的一次传递中计算出来的


然后是一个随机交换,这意味着数据通过网络交换每个分区的聚合结果,最终的聚合执行HashAggregate,然后发送到驱动程序collect

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

让我们举一个与你的例子非常相似的例子

spark.range1000 .withColumntest,“id铸双 .withColumntest2,'id+10 .aggsum'id,意思是'test2,count'* 显示 让我们看看用户界面

范围对应于数据的创建,然后您将两个withColumn操作和聚合agg投影到每个分区中,我们这里有2个分区。在给定的分区中,这些操作是按顺序完成的,但所有分区都是同时完成的。此外,它们在蓝色框中处于同一阶段,这意味着它们都是在数据的一次传递中计算出来的


然后有一个SUFFLE交换,这意味着数据通过网络交换,每个分区的聚合结果和最后的聚合被执行哈希聚合,然后发送给驱动程序收集< /P>:考虑你的例子,有两个列操作:使用CalpnnType,CulnNo.Test2,AggSuthMe,agg_是指,agg_计数。如果我正确理解你的答案,我们有并行的列测试,列测试2,然后在这之后,我们有并行的3个运算agg_sum,agg_mean,agg_count。我担心的是列测试->列测试2->累计总和,累计平均数,累计计数,甚至更糟,都是连续的。我对所有列都有一些操作,恐怕它们不是并行计算的。并行不是我要使用的词,但在你的例子中,我可以向你保证spark不会多次传递数据。使用Column和分区AGG的所有计算都是在同一时间计算的,即在相同的数据传递过程中。基本上,只要您使用SparkSQL,如果您能想出一种合理的优化方法来加速查询,Spark可能会执行它。当然,只需检查UI即可。如果还不清楚,请不要犹豫。因此,他想知道的是withColumns是在分区内并行发生还是一个接一个地发生。你按顺序陈述,这是我的理解。细微差别可能是比预期少的执行者。也许分布是你要找的词。我的意思是:考虑你的例子,有两个列操作:用CalpnnType,用CalnnnTest2,AggSuthGuy,AggMeNeX,AgGueCube。如果我正确理解你的答案,我们有并行的列测试,列测试2,然后在这之后,我们有并行的3个运算agg_sum,agg_mean,agg_count。我担心的是列测试->列测试2->累计总和,累计平均数,累计计数,甚至更糟,都是连续的。我对所有列都有一些操作,恐怕它们不是并行计算的。并行不是我要使用的词,但在你的例子中,我可以向你保证spark不会多次传递数据。使用Column和分区AGG的所有计算都是在同一时间计算的,即在相同的数据传递过程中。基本上,只要您使用SparkSQL,如果您能想出一种合理的优化方法来加速查询,Spark可能会执行它。当然,只需检查UI即可。如果仍然没有,请不要犹豫


很清楚。所以他想知道的是withColumns是在分区内并行发生还是一个接一个地发生。你按顺序陈述,这是我的理解。细微差别在于,执行者的工作可能比预期的要少。也许“分布式”是你要寻找的词。