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

当在磁盘上写入时,我们如何通过重新分区来停止增加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卷还可用于

  • 问题内容: 我目前正在实施ping / pong缓冲方案,以安全地将文件写入磁盘。我在Linux / CentOS计算机上使用C ++ / Boost。现在,我面临的问题是强制将文件实际写入磁盘。不管文件系统的所有缓存策略(ext3 / ext4)/ SO自定义规则/ RAID控制器/硬盘控制器如何,都可以这样做吗? 最好使用普通的fread()/ fwrite(),c ++ ostream或bo