SQL 和 withColumn 之间的性能
Posted
技术标签:
【中文标题】SQL 和 withColumn 之间的性能【英文标题】:Performance Between SQL and withColumn 【发布时间】:2019-09-09 13:39:24 【问题描述】:假设我创建了以下数据框:
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('select *, a + b as c from mydf')
虽然两者产生相同的结果,但哪种方法的计算速度更快?
另外,sql 与 spark 用户定义函数相比如何?
【问题讨论】:
【参考方案1】:虽然两者产生相同的结果,但哪种方法的计算速度更快?
查看执行计划:
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
或spark-sql
没有计算优势。如果代码编写正确,则底层计算将是相同的。
在某些情况下,使用spark-sql
表达某些内容可能更容易,例如,如果您想使用use a column value as a parameter to a spark function。
另外,sql 与 spark 用户定义函数相比如何?
看看这个帖子:Spark functions vs UDF performance?
【讨论】:
以上是关于SQL 和 withColumn 之间的性能的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 查询:Union vs Distinct union 所有性能
如何使nullable = true,使用withcolumn创建1和0的二进制列时,