当前位置: 首页 > 知识库问答 >
问题:

当在磁盘上写入时,我们如何通过重新分区来停止增加parquet文件的大小

潘修为
2023-03-14

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

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

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

重新分区导致了大量的混乱,输入文件是拼花格式的。

共有1个答案

冯渝
2023-03-14
import org.apache.spark.util.SizeEstimator
val numBytes = SizeEstimator.estimate(df)

val desiredBytesPerFile = ???

df.coalesce(numBytes / desiredBytesPerFile).write.save("/./")

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

 类似资料:
  • 我正在使用的一个数据湖()有2 TB的数据和20000个文件。我想把数据集压缩成2000 GB的文件。 如果运行并写入磁盘,数据湖包含1.9 TB的数据。 如果运行并写入磁盘,数据湖包含2.6 TB的数据。 数据湖中的每个文件比预期的大0.3 GB(它们都是1.3 GB的文件,而不是1 GB的文件)。 为什么方法会增加整个数据湖的大小? 还有一个相关的问题讨论了为什么在运行聚合后数据湖的大小会增加

  • 通过Scala spark-shell,我可以使用ElasticSearch-Hadoop-5.5.0连接器访问Elasticsearch db。 是否有一种方法可以增量地导出数据(例如,一次100k条记录),这样我就不会使系统内存过载?

  • 按照建议,我在我的中创建了一个文件 要能够运行。 当我运行,我得到以下输出(使用选项): 看起来该命令运行“成功”,但在我挂载的本地目录中找不到文件,即。然而,挂载必须工作,因为它成功地连接到数据库,即容器能够访问和读取。 首先,我认为我可能必须“告诉”Docker允许在我的磁盘上写入,但似乎应该支持这一点[从Docker Hub上的描述来看]: /liquibase/changelog卷还可用于

  • 我目前正在做一个小程序,从磁盘读取png文件,做一些修改,并保存回来。除了一个小问题外,一切都运行得很顺利,在我将文件保存回磁盘后,它的大小总是增加,例如,27.1MB的文件会变成33.3MB。 如何在不改变图像大小的情况下读取和保存图像?