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用户定义函数相比如何
请看这篇文章: