Dataframe SQL和withColumn之间的性能

Dataframe SQL和withColumn之间的性能,dataframe,apache-spark,pyspark,Dataframe,Apache Spark,Pyspark,假设我创建以下数据帧: dt=pd.DataFrame(np.array([[1,5],[2,12],[4,17]),columns=['a','b'])) df=spark.createDataFrame(dt) 我想创建第三列,c,这是这两列的总和。我有以下两种方法 Spark中的withColumn()方法: df1=df.withColumn('c',df.a+df.b) 或使用sql: df.createOrReplaceTempView('mydf') df2=spark.sql

假设我创建以下数据帧:

dt=pd.DataFrame(np.array([[1,5],[2,12],[4,17]),columns=['a','b']))
df=spark.createDataFrame(dt)
我想创建第三列,c,这是这两列的总和。我有以下两种方法

Spark中的withColumn()方法:

df1=df.withColumn('c',df.a+df.b)
或使用sql:

df.createOrReplaceTempView('mydf')
df2=spark.sql('从mydf中选择*,a+b作为c')
虽然两者产生相同的结果,但哪种方法计算速度更快

另外,sql与spark用户定义函数相比如何

虽然两者产生相同的结果,但哪种方法计算速度更快

看看执行计划:

df1.explain()
#== Physical Plan ==
#*(1) Project [a#0L, b#1L, (a#0L + b#1L) AS c#4L]
#+- Scan ExistingRDD[a#0L,b#1L]

df2.explain()
#== Physical Plan ==
#*(1) Project [a#0L, b#1L, (a#0L + b#1L) AS c#8L]
#+- Scan ExistingRDD[a#0L,b#1L]
由于这两种方法相同,因此这两种方法是相同的

一般来说,使用
withColumn
sparksql
都没有计算优势。如果代码编写正确,底层计算将是相同的

在某些情况下,使用
sparksql
表达某些内容可能更容易,例如,如果您愿意的话

另外,sql与spark用户定义函数相比如何

请看这篇文章: