Apache Spark:获取map reduce管道中的executor ID



关于如何在Apache Spark作业中获取Spark执行器ID的小问题。

我有一段非常简单的代码:

final Dataset<Row> rowDataSet = sparkSession.read()[...].load();
final Dataset<String> stringDataSet = rowDataSet
.map(
(MapFunction<Row, String>) row -> 
doSomeTransformationFromRowToStringUsingSparkExecutorID(row, SparkEnv.executorId()), Encoders.STRING()
);
stringDataSet.show();

问题是关于doSomeTransformationFromRowToStringUsingSparkExecutorID方法。

这个方法需要spark执行器ID,行正在被处理,以便进行一些转换。

因为我需要Spark执行器ID,所以我使用了官方文档中的SparkEnv.executorId()

不幸的是,上面没有工作,因为Non-static method 'executorId()' cannot be referenced from a static context

在这种情况下,SparkEnv.executorId()是获取执行器ID的好方法吗?

如果是,如何解决这个非静态方法'executorId()'问题?

如果没有,那么获取遗嘱执行人ID的最佳替代方法是什么?

谢谢

根据文档SparkEnv类有static方法get获取SparkEnv实例。在这个实例中,你可以调用executorId()方法(这不是静态的):

import org.apache.spark.SparkEnv
SparkEnv sparkEnv = SparkEnv.get();
String executorId = sparkEnv.executorId();
final Dataset<Row> rowDataSet = sparkSession.read()[...].load();
final Dataset<String> stringDataSet = rowDataSet
.map(
(MapFunction<Row, String>) row ->
doSomeTransformationFromRowToStringUsingSparkExecutorID(row, SparkEnv.get().executorId()), Encoders.STRING()
);
stringDataSet.show();

最新更新