火花不同的输入/输出目录大小(对于相同的数据)

Posted

技术标签:

【中文标题】火花不同的输入/输出目录大小(对于相同的数据)【英文标题】:Spark not same input/ouput directory size (for same data) 【发布时间】:2017-03-24 10:20:32 【问题描述】:

为了减少NameNode分配的块数。我正在尝试将一些小文件连接到 128MB 文件。这些小文件是gz格式的,128MB的文件也必须是gz格式的。

为此,我得到所有小文件的总大小,并将这个总大小(以 MB 为单位)除以 128 得到我需要的文件数。

然后我执行rdd.repartition(nbFiles).saveAsTextFile(PATH,classOf[GzipCodec])

问题是我的输出目录大小比我的输入目录大小大(高出 10%)。我使用默认和最佳压缩级别进行了测试,我总是得到更高的输出大小。

我不知道为什么我的输出目录比输入目录高,但我想这与我正在重新分区输入目录的所有文件有关。

有人可以帮我理解为什么我会得到这个结果吗?

谢谢:)

【问题讨论】:

文件数等于 nbFiles ? nbFiles 是我将在输出中生成的文件数,以具有 128MB 大小的文件。 (sumSize / 128 MB) 【参考方案1】:

压缩级别取决于数据分布。当您rdd.repartition(nbFiles) 时,您会随机打乱所有数据,因此如果输入中有某种结构可以降低熵并启用更好的压缩,那么它将丢失。

您可以尝试其他方法,例如 colaesce 不进行随机播放或排序,看看是否可以获得更好的结果。

【讨论】:

以上是关于火花不同的输入/输出目录大小(对于相同的数据)的主要内容,如果未能解决你的问题,请参考以下文章

如何增加火花流接收器

验证输入火花数据帧中的时间戳以生成正确的输出火花数据帧

在 git 中使用 Windows 中具有相同名称但大小写不同的目录

如何确保 Caffe 分割网络输出大小与输入相同?

R中一个数据集的向量大小分配错误,但对于相同大小的不同数据集却没有

火花随机森林:相同种子的不同结果