8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在 Palantir Foundry 上的 Spark 中写入分区数据时如何避免排序?

Aidan Hakimian 2月前

45 0

Spark 正在将分区键上的排序操作添加到查询计划中。这会减慢构建速度,增加内存使用量并导致磁盘溢出。我确信这是一种新的行为,尽管我无法……

Spark 正在将分区键上的排序操作添加到查询计划中。

这会减慢构建速度,增加内存使用量并导致磁盘溢出。

我确信这是一种新的行为,尽管我无法验证,因为旧版本的火花详细信息不再可用。

写入逻辑:

df = df.repartition('date')

tgt.write_dataframe(df, partition_cols=['date'])

逻辑计划如下:

InsertIntoHadoopFsRelationCommand foundry://...
+- WriteFiles
   +- Sort [date#337 ASC NULLS FIRST], false
      +- Project ...
         +- CollectMetrics ...
            +- RepartitionByExpression [date#337]
               +- Project ...

这些问题看起来可能相关,但它们应该在 Spark 3.4+ 中得到修复:

  • SPARK-37194:如果不是动态分区,请避免在 FileFormatWriter 中进行不必要的排序
  • SPARK-41914:禁用分区写入和计划写入优化时的排序问题

我相信直到最近我们的 Foundry 实例还在使用 Spark 3.2.1,但无论目标 Spark 版本是什么,运行时版本都已悄然更改为 Spark 3.4 和 3.5。

这种排序有必要吗?可以将其删除吗?

帖子版权声明 1、本帖标题:在 Palantir Foundry 上的 Spark 中写入分区数据时如何避免排序?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Aidan Hakimian在本站《apache-spark》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 根据 SPARK-44512 , partitionBy 不保证排序。

    它可以对您的数据进行排序(即使您已明确对其进行排序):

    虽然我理解 Apache Spark 3.4.0 改变了上述行为,但 I don't think there is a contract that Apache Spark's partitionBy operation preserves the previous ordering .

    因此,让我结束这个问题,因为 Not A Problem .

    据我所知,这种行为没有记录。

    要从执行计划中删除排序,您可以设置这个未记录的配置值: spark.sql.optimizer.plannedWrite.enabled=false .

    在 Foundry 中管理配置的推荐方法是设置 Spark 配置文件。您也可以使用注入的 ctx 参数直接从转换中进行设置:

    @transform(
        tgt=Output(...),
    )
    def compute(ctx, tgt, ...):
        df = ...
    
        # Prevent sort with partitioned write
        ctx.spark_session.conf.set('spark.sql.optimizer.plannedWrite.enabled', False)
    
        tgt.write_dataframe(df, partition_cols=['col1']))
    
返回
作者最近主题: