我通常使用.gz在Spark中读写文件,文件数应该与RDD分区数相同。即一个巨大的.gz 文件将读入单个分区。但是,如果我读入一个 .bz2,我还会得到一个巨大的分区吗?或者 Spark 会支持自动将一个 .bz2 拆分为多个分区吗?
另外,当 Hadoop 从一个 bz2 文件中读取它时,我怎么知道它会有多少个分区。谢谢!
我通常使用.gz在Spark中读写文件,文件数应该与RDD分区数相同。即一个巨大的.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
.
那将yourRDD.partitions.size
适用于 scala 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")