Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 为什么不';t文件拆分的大小随着重新分区数据的增加而减小?_Apache Spark_Apache Spark Sql_Apache Spark 2.0 - Fatal编程技术网

Apache spark 为什么不';t文件拆分的大小随着重新分区数据的增加而减小?

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

我正在运行一个Spark批处理作业,该作业使用。我正在本地运行我的机器

我想使用我所有的内核(8个),但我想保持每个任务的小规模,这样所有任务使用的总RAM不会超过我可用的内存

所以我使用了
重新分区
如下:

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我明白了。那么请补充一个答案。