2015-07-25 4 views
7

Есть ли способ получить идентификатор задачи карты в Spark? Например, если каждая задача карты вызывает определенную пользователем функцию, могу ли я получить идентификатор этой задачи карты из этой пользовательской функции?Как получить идентификатор задачи карты в Spark?

ответ

15

Я не уверен, что вы имеете в виду 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) 

Аналогичная функциональность была добавлена ​​PySpark в Спарк 2.2.0 (SPARK-18576):

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) 
Смежные вопросы