我正在使用spark 2.1.1版本。当我将文件读入DataFrame并稍后重新分区时,执行程序日志只出现在一个执行程序中。
实际文件只有一个分区。我正在将它重新划分为6个分区。
val df = spark.read.load(<file location>)
val repartitionedDF = df.repartition(6)
我有10个工作节点,并为spark应用程序分配了6个核心。我在6台机器上共有6个执行器。我正在使用foreachPartition进行一些处理,并记录一些必需的步骤。
示例代码。
repartitionedDF.foreachPartition(partition =>
{
logger.info("working on partition " + partition.length)
<some code>
}
)
当我检查spark UI时,所有日志只出现在一个执行程序中,其余的执行程序没有任何信息执行程序日志。
如果我使用列表创建DF,则日志将出现在所有计算机上。 我无法确认所有执行程序之间的共享工作或刚刚与最终分区一起发布的日志记录。
对于以下代码,我可以在spark UI中看到有关所有执行程序的日志信息
val newDF = List(1,2,3,4,5,6).toDF
val partitionedDF2 = newDF.repartition(6)
partitionedDF2.foreachPartition(part => logger.info("part size " + part.length))