如何确保在 Foundry Python Transforms 中构建的数据集中的文件大小一致?
How do I ensure consistent file sizes in datasets built in Foundry Python Transforms?
我的 Foundry 转换在不同的运行中产生不同数量的数据,但我希望每个文件中的行数量相似。我可以使用 DataFrame.count(),然后使用 coalesce/repartition,但这需要计算完整的数据集,然后缓存或重新计算它。 Spark 有办法解决这个问题吗?
您可以使用 spark.sql.files.maxRecordsPerFile 配置选项,方法是根据 @transform 的输出进行设置:
output.write_dataframe(
output_df,
options={"maxRecordsPerFile": "1000000"},
)
如果您唯一关心的是每个文件的记录数,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,
)
如果您的存储桶列分布良好,这将有助于每个数据集文件保持相似的行数。
我的 Foundry 转换在不同的运行中产生不同数量的数据,但我希望每个文件中的行数量相似。我可以使用 DataFrame.count(),然后使用 coalesce/repartition,但这需要计算完整的数据集,然后缓存或重新计算它。 Spark 有办法解决这个问题吗?
您可以使用 spark.sql.files.maxRecordsPerFile 配置选项,方法是根据 @transform 的输出进行设置:
output.write_dataframe(
output_df,
options={"maxRecordsPerFile": "1000000"},
)
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,
)
如果您的存储桶列分布良好,这将有助于每个数据集文件保持相似的行数。