在pyspark中获取执行程序任务的任务ID

时间:2018-05-05 05:47:32

标签: python apache-spark pyspark

我在pyspark中有rdd.foreachPartition(some_function)个动作。 some_function函数将执行程序中当前任务的数据写入所有执行程序(如hdfs或s3存储桶)通用位置的文件中。

现在,如果我在所有执行程序中使用相同的文件名,则文件将被替换并仅保留最后写入的文件。所以我正在寻找一个唯一的标识符来表示每个任务,从而代表每个文件名。

我对任务ID感兴趣,因为它是唯一的。但无法找到任何地方,如何在pyspark中获取任务ID。我在scala / java中找到了similar但在pyspark中找不到。

更新:根据建议,我检查了this。但是,这给了stageID,而我对每个阶段中的各个任务的taskID感兴趣。 stageId答案也是一个很好的信息。

1 个答案:

答案 0 :(得分:2)

我有一段时间遇到同样的问题。

我在文件名中使用datetime.now()解决了这个问题,并且绝对相信我不会得到我也使用的相同文件名:

rdd.mapPartitionsWithIndex(lambda x,y: (x,y), preservesPartitioning = True).foreachPartition(lambda x: some_function(x))

这将为您提供x [0]的唯一分区ID,您可以将其添加到任何文件名以确保唯一性