为什么在我重新分区数据时文件拆分的大小没有减少?
Why don't Sizes of File Splits decrease as I repartition data?
我是 运行 一个使用 spark-xml
datasource 处理大型 (51G) xml 文件的 Spark 批处理作业。我在我的机器上本地 运行。
我想使用我所有的核心 (8),但我想保持每个任务的大小较小,以便所有任务使用的总 RAM 不会增长超过我可用的。
所以我这样使用 repartition
:
val df: DataFrame = spark.sqlContext.read
.option("mode", "FAILFAST")
.format("com.databricks.spark.xml")
.schema(customSchema)
.option("rowTag", "row")
.load(s"$pathToInputXML")
.repartition(30)
所以我认为每个任务将处理大约 (51GB / 30 个分区 / 8
核心)==每个任务212MB。
事实是,看起来每个任务只有 33MB 长,正如您从输出中看到的那样:
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:0+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:134217728+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:33554432+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:234881024+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:201326592+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:100663296+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:167772160+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:67108864+33554432
有人能给我解释一下吗?为什么当我更改分区数时文件拆分的大小没有改变?
Why doesn't the size of the file split change as I change the number of partitions?
因为 repartitioning
不影响输入拆分。在将数据加载到 Spark 后,您的代码会随机播放数据。
如果您想修改输入拆分的数量,您 should adjust spark.sql.files.maxPartitionBytes
参数。
我是 运行 一个使用 spark-xml
datasource 处理大型 (51G) xml 文件的 Spark 批处理作业。我在我的机器上本地 运行。
我想使用我所有的核心 (8),但我想保持每个任务的大小较小,以便所有任务使用的总 RAM 不会增长超过我可用的。
所以我这样使用 repartition
:
val df: DataFrame = spark.sqlContext.read
.option("mode", "FAILFAST")
.format("com.databricks.spark.xml")
.schema(customSchema)
.option("rowTag", "row")
.load(s"$pathToInputXML")
.repartition(30)
所以我认为每个任务将处理大约 (51GB / 30 个分区 / 8 核心)==每个任务212MB。
事实是,看起来每个任务只有 33MB 长,正如您从输出中看到的那样:
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:0+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:134217728+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:33554432+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:234881024+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:201326592+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:100663296+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:167772160+33554432
17/04/28 19:40:02 INFO NewHadoopRDD: Input split: file:/media/felipe/SAMSUNG/StackHeavy/Posts.xml:67108864+33554432
有人能给我解释一下吗?为什么当我更改分区数时文件拆分的大小没有改变?
Why doesn't the size of the file split change as I change the number of partitions?
因为 repartitioning
不影响输入拆分。在将数据加载到 Spark 后,您的代码会随机播放数据。
如果您想修改输入拆分的数量,您 should adjust spark.sql.files.maxPartitionBytes
参数。