以减少NameNode分配的块数。我正在尝试将一些小文件连接到128‘m文件。这些小文件采用gz格式,128 be文件也必须采用gz格式。
要做到这一点,我将得到所有小文件的和大小,并将这个和大小除以128,以获得我需要的文件数。
然后我执行一个rdd.repartition(nbFiles).saveAsTextFile(PATH,classOf[GzipCodec])
问题是我的输出目录大小高于我的输入目录大小(高10%)。我测试了默认的和最佳的压缩级别,并且我总是获得更高的输出大小。
我不知道为什么我的输出目录比我的输入目录更高,但我想它是链接到我正在重新划分输入目录的所有文件的事实。
有人能帮我弄明白为什么我会得到这个结果吗?
谢谢:)
发布于 2017-03-24 12:33:22
压缩级别将取决于数据分布。当您rdd.repartition(nbFiles)随机地对所有数据进行洗牌时,如果输入中存在某种结构,从而降低了熵并启用了更好的压缩,那么它将丢失。
您可以尝试其他一些方法,比如colaesce,而无需洗牌或排序,以确定是否可以获得更好的结果。
https://stackoverflow.com/questions/42996885
复制相似问题