scala - 如何在 Spark 中获取 map task 的 ID?

标签 scala hadoop apache-spark hadoop-yarn

有没有办法在 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/

相关文章:

scala - Spark - CSV - Nullable false 不抛出异常

apache-spark - Spark将Parquet写入S3,最后的任务永远长久

scala - 将数据帧中的字符串值转换为时间戳并存储在 Hive 中

javascript - Scala 像 JavaScript 对象一样解构

scala - 根据发送的消息在 Akka Ask 上恢复

hadoop - 如何在MapReduce中处理可拆分lzo文件的记录/行边界?

hadoop - hadoop安装路径在节点之间是否应该相同

java - 映射器可以写入多个文件吗

linux - 在 Linux 上运行 Spark : $JAVA_HOME not set error

Scala 惰性 val 缓存