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")
我平时用.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")