PySpark 中 select() 和 .withColumn()/.withColumns() 的性能比较

问题描述 投票:0回答:1

我正在寻求优化 PySpark 中的数据转换,并注意到 文档 建议在多个

.select()
调用上使用
.withColumn()
以获得更好的性能。这提出了关于
.withColumns()
(从地图添加多列的版本。它在 3.3.0 版本中引入)性能的两个问题:

  1. .withColumns()
    是否会遇到与顺序
    .withColumn()
    调用相同的性能缺陷?
  2. 在添加或转换多列时,
    .withColumns()
    .select()
    相比,效率如何?
dataframe apache-spark pyspark
1个回答
0
投票

withColumns 对要删除或替换的列执行额外的分析检查。 select 不会,因此它会更快,但对于您的用例来说可能不是正确的结果。

虽然此检查不像写文件那么繁重,但它仍然是一个动作并强制进行评估。

“它会更快” - 这实际上取决于表达式树的复杂程度以及是否需要读取文件(parquet 确实会受到这种影响,而 delta 不会)。如果您不知道当前架构,那么使用 withColumns 肯定更方便(自己评估架构以执行此操作最终会产生相同的性能影响)。

© www.soinside.com 2019 - 2024. All rights reserved.