7

我通常使用.gz在Spark中读写文件,文件数应该与RDD分区数相同。即一个巨大的.gz 文件将读入单个分区。但是,如果我读入一个 .bz2,我还会得到一个巨大的分区吗?或者 Spark 会支持自动将一个 .bz2 拆分为多个分区吗?

另外,当 Hadoop 从一个 bz2 文件中读取它时,我怎么知道它会有多少个分区。谢谢!

4

2 回答 2

9
    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.

那将yourRDD.partitions.size适用于 scala api 或 yourRDD.getNumPartitions()python api。

于 2016-05-25T21:09:39.677 回答
3

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

通过 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")
于 2018-12-10T10:27:34.027 回答