我有一个Spark应用程序执行以下操作
我已将问题建模如下
sc.parallelize
生成文件名的RDD。我试图通过numberOfPartitions
来控制sc.parallelize(filenameArray, sizeOfFilenameArray)
- 让我们称之为filenamesRDD
objectsRDD
pairRDD
objectsRDD
reduceByKey
获取每个密钥的计数 - 让我们将此RDD称为countsRDD
。 目前由于某个错误,我numberOfPartitions
设置为1 countsRDD
foreachPartition
将countsRDD
保留到数据库我有两个运行应用程序的环境
spark.default.parallelism
= 4 spark.default.parallelism
= 32 正如所料,我的工作分两个阶段执行
filenamesRDD
- > objectsRDD
- > pairRDD
pairRDD
- > countsRDD
- > persistToDB 我观察到在我的Prod环境中,为阶段1和阶段2生成的numberOfTasks
不等于相应RDD中的numberOfParitions
。我通过打印确认了numberOfPartitions
的值。这是一个例子
numberOfFiles
= 100
测试环境
阶段1
numberOfTasks
= 100,numberOfParitions
= 100 objectsRDD
和pairRDD
Stage2的
numberOfTasks
= 1,numberOfPartitions
= 1 countsRDD
产品环境
阶段1
numberOfTasks
= 100,numberOfPartitions
= 100 objectsRDD
和pairRDD
numberOfTasks
= 16,numberOfPartitions
= 100 objectsRDD
和pairRDD
Stage2的
numberOfTasks
= 1,numberOfPartitions
= 1 countsRDD
numberOfTasks
= 16,numberOfPartitions
= 1 countsRDD
我已经阅读了很多材料,我在numberOfPartitions != numberOfTasks
看到的实例和解释都没有。有人可以帮助弄清楚发生了什么。
答案 0 :(得分:2)
两个环境可能具有不同的配置值。您可以在历史记录页面中查看配置"环境"标签。 我建议比较Test和Prod环境设置。