【问题标题】:How can we stop increasing the size of parquet files when writting on disk ,by doing repartition通过重新分区,我们如何在磁盘上写入时停止增加镶木地板文件的大小
【发布时间】:2021-11-19 16:14:39
【问题描述】:

我正在尝试在 hdfs 目录中合并小于 512 mb 的小文件。合并后磁盘上的文件大小大于输入大小。有什么方法可以有效控制大小。

Df=spark.read.parquet("/./")
Magic_number=(total size of input file / 512)

Df.repartition(Magic_number).write.save("/./")

重新分区导致大量改组,并且输入文件采用 parquet 格式。

【问题讨论】:

    标签: file apache-spark disk controlling


    【解决方案1】:
    import org.apache.spark.util.SizeEstimator
    val numBytes = SizeEstimator.estimate(df)
    
    val desiredBytesPerFile = ???
    
    df.coalesce(numBytes / desiredBytesPerFile).write.save("/./")
    

    这将为您提供每个文件的大约写入字节数。

    【讨论】:

    • Kieran,我得到了必须通过其他方式执行合并的数字。这里的问题是,输入文件大小为 681 MB 和 1541 列,重新分区(2)并写入磁盘后,输出文件大小为 1.1GB,因此总共有大约 300+ MB 的差异。所以这个尺寸的增加让我很难过。
    • 没有发生任何转换?而且您对两者都使用相同的压缩方案?
    • 是的,它在没有转换的情况下发生,文件在输入中没有被压缩,但在输出中它被压缩,因为 pyspark 功能 df.write.save ()
    猜你喜欢
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2022-11-11
    • 2021-06-22
    • 2018-10-27
    相关资源
    最近更新 更多