关于如何在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();