有没有办法在 Spark 中获取 map task 的 ID?例如,如果每个 map 任务调用一个用户定义函数,我能否从该用户定义函数中获取该 map 任务的 ID?
最佳答案
我不确定您所说的 map task ID 是什么意思,但您可以使用 TaskContext
访问任务信息:
import org.apache.spark.TaskContext
sc.parallelize(Seq[Int](), 4).mapPartitions(_ => {
val ctx = TaskContext.get
val stageId = ctx.stageId
val partId = ctx.partitionId
val hostname = java.net.InetAddress.getLocalHost().getHostName()
Iterator(s"Stage: $stageId, Partition: $partId, Host: $hostname")
}).collect.foreach(println)
Spark 2.2.0 ( SPARK-18576 ) 中的 PySpark 添加了类似的功能:
from pyspark import TaskContext
import socket
def task_info(*_):
ctx = TaskContext()
return ["Stage: {0}, Partition: {1}, Host: {2}".format(
ctx.stageId(), ctx.partitionId(), socket.gethostname())]
for x in sc.parallelize([], 4).mapPartitions(task_info).collect():
print(x)
关于scala - 如何在 Spark 中获取 map task 的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31631791/