【问题标题】:Performance Between SQL and withColumnSQL 和 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 用户定义函数相比如何?

【问题讨论】:

    标签: dataframe apache-spark pyspark


    【解决方案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]
    

    由于它们是相同的,因此这两种方法是相同的。

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

    在某些情况下,使用spark-sql 表达某些内容可能更容易,例如,如果您想使用use a column value as a parameter to a spark function

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

    看看这个帖子:Spark functions vs UDF performance?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 2011-06-20
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      相关资源
      最近更新 更多