【问题标题】:How do I ensure consistent file sizes in datasets built in Foundry Python Transforms?如何确保在 Foundry Python Transforms 中构建的数据集中文件大小一致?
【发布时间】:2021-12-08 23:25:15
【问题描述】:

我的 Foundry 转换在不同的运行中产生不同数量的数据,但我希望每个文件中的行数相似。我可以使用DataFrame.count(),然后合并/重新分区,但这需要计算完整的数据集,然后缓存或重新计算。 Spark 有办法解决这个问题吗?

【问题讨论】:

    标签: palantir-foundry foundry-code-repositories foundry-python-transform


    【解决方案1】:

    您可以使用 spark.sql.files.maxRecordsPerFile 配置选项,方法是根据 @transform 的输出设置它:

    output.write_dataframe(
        output_df,
        options={"maxRecordsPerFile": "1000000"},
    )
    

    【讨论】:

      【解决方案2】:

      proggeo 的答案很有用,如果您唯一关心的是每个文件的记录数。但是,有时对数据进行存储很有用,以便 Foundry 能够优化下游操作,例如轮廓分析或其他转换。

      在这些情况下,您可以使用以下内容:

      bucket_column = 'equipment_number'
      num_files = 8
      output_df = output_df.repartition(num_files, bucket_column)
      output.write_dataframe(
          output_df,
          bucket_cols=[bucket_column],
          bucket_count=num_files,
      )
      

      如果您的存储桶列分布良好,这将有助于保持每个数据集文件的行数相似。

      【讨论】:

      • 所以这实际上并不能解决问题,因为你必须计算行数来推断文件数,这是我需要避免的
      猜你喜欢
      • 1970-01-01
      • 2022-06-20
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      相关资源
      最近更新 更多