什么时候文件是“可拆分的”?

w1jd8yoj  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(458)

在使用spark时,有时会在配置单元表中遇到一个大文件,有时会尝试处理配置单元表中许多较小的文件。
我知道在调优spark作业时,它的工作方式取决于文件是否可拆分。在cloudera的这个页面中,它说我们应该知道文件是否可拆分:
…例如,如果您的数据以几个大的不可散播文件的形式到达。。。
如何知道文件是否可拆分?
如果文件可拆分,如何知道要使用的分区数?
如果我试图编写一段代码来处理任何一个配置单元表(即上面描述的两种情况中的任何一种),那么在更多分区方面出错是否更好?

6pp0gazn

6pp0gazn1#

考虑到spark接受hadoop输入文件,请看下图。
仅限 bzip2 格式化文件是可拆分的,其他格式如 zlib, gzip, LZO, LZ4 and Snappy 格式不可拆分。
关于对分区的查询,分区不依赖于要使用的文件格式。它取决于文件中的内容-如日期等分区列的值。

编辑1:看看这个se问题和spark阅读zip文件的工作代码。

JavaPairRDD<String, String> fileNameContentsRDD = javaSparkContext.wholeTextFiles(args[0]);
        JavaRDD<String> lineCounts = fileNameContentsRDD.map(new Function<Tuple2<String, String>, String>() {
            @Override
            public String call(Tuple2<String, String> fileNameContent) throws Exception {
                String content = fileNameContent._2();
                int numLines = content.split("[\r\n]+").length;
                return fileNameContent._1() + ":  " + numLines;
            }
        });
        List<String> output = lineCounts.collect();

编辑2:
lzo文件可以拆分。
只要分割发生在块边界上,lzo文件就可以被分割
有关详细信息,请参阅本文。

相关问题