Apache spark 为什么不';t文件拆分的大小随着重新分区数据的增加而减小?
我正在运行一个Spark批处理作业,该作业使用。我正在本地运行我的机器 我想使用我所有的内核(8个),但我想保持每个任务的小规模,这样所有任务使用的总RAM不会超过我可用的内存 所以我使用了Apache spark 为什么不';t文件拆分的大小随着重新分区数据的增加而减小?,apache-spark,apache-spark-sql,apache-spark-2.0,Apache Spark,Apache Spark Sql,Apache Spark 2.0,我正在运行一个Spark批处理作业,该作业使用。我正在本地运行我的机器 我想使用我所有的内核(8个),但我想保持每个任务的小规模,这样所有任务使用的总RAM不会超过我可用的内存 所以我使用了重新分区如下: val df: DataFrame = spark.sqlContext.read .option("mode", "FAILFAST") .format("com.databricks.spark.xml") .schema(customSchema) .option("ro
重新分区如下:
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
有人能给我解释一下吗?为什么文件拆分的大小不会随着我更改分区的数量而改变
为什么文件拆分的大小不会随着我更改分区的数量而改变
因为重新分区
不会影响输入拆分。您的代码在数据加载到Spark后对其进行洗牌
如果要修改输入拆分的数目,请选择参数。尝试coalesce(30)
而不是repartition(30)
<代码>重新分区
将创建一个洗牌。顺便说一下,我认为输入拆分将始终相同。您应该检查任务编号。@zsxwing我明白了。那么请补充一个答案。