我在pyspark中有rdd.foreachPartition(some_function)
个动作。
some_function
函数将执行程序中当前任务的数据写入所有执行程序(如hdfs或s3存储桶)通用位置的文件中。
现在,如果我在所有执行程序中使用相同的文件名,则文件将被替换并仅保留最后写入的文件。所以我正在寻找一个唯一的标识符来表示每个任务,从而代表每个文件名。
我对任务ID感兴趣,因为它是唯一的。但无法找到任何地方,如何在pyspark中获取任务ID。我在scala / java中找到了similar但在pyspark中找不到。
更新:根据建议,我检查了this。但是,这给了stageID,而我对每个阶段中的各个任务的taskID感兴趣。 stageId答案也是一个很好的信息。
答案 0 :(得分:2)
我有一段时间遇到同样的问题。
我在文件名中使用datetime.now()
解决了这个问题,并且绝对相信我不会得到我也使用的相同文件名:
rdd.mapPartitionsWithIndex(lambda x,y: (x,y), preservesPartitioning = True).foreachPartition(lambda x: some_function(x))
这将为您提供x [0]的唯一分区ID,您可以将其添加到任何文件名以确保唯一性