Spark:读入 .gz 和 .bz2 时的区别

Spark: difference when read in .gz and .bz2

我平时用.gz在Spark中读写文件,文件数应该和RDD分区数一样。 IE。一个巨大的 .gz 文件将读入单个分区。但是,如果我读取一个单独的 .bz2,我还会得到一个单独的巨型分区吗?或者 Spark 会支持自动拆分一个 .bz2 到多个分区吗?

此外,当 Hadoop 从一个 bz2 文件读入时,我如何知道它有多少个分区。谢谢!

    However, if I read in one single .bz2, would I still get one single giant partition?   
Or will Spark support automatic split one .bz2 to multiple partitions?

如果您指定 n 个分区来读取 bzip2 个文件,Spark 将生成 n 个任务来并行读取文件。 n 的默认值设置为 sc.defaultParallelism。分区数是 textFile (docs).

调用中的第二个参数
. one giant .gz file will read in to a single partition.

请注意,您可以随时执行

sc.textFile(myGiantGzipFile).repartition(desiredNumberOfPartitions)

读取文件后获得所需的分区数。


Also, how do I know how many partitions it would be while Hadoop read in it from one bz2 file.

对于 Scala yourRDD.partitions.size api 或 yourRDD.getNumPartitions() 对于 python api。

我不知道为什么我的测试程序 运行 在一个执行器上,经过一些测试我想我明白了,就像那样:

来自 pySpark

// Load a DataFrame of users. Each line in the file is a JSON 

// document, representing one row.

val sqlContext = new org.apache.spark.sql.SQLContext(sc)

val user = sqlContext.read.json("users.json.bz2")