关于如何在 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()
。
不幸的是,上面的方法不起作用,因为无法从静态上下文中引用非静态方法“executorId()”
在这种情况下,SparkEnv.executorId()
是获取执行程序 ID 的好方法吗?
如果是,请如何解决此非静态方法“executorId()”问题?
如果没有,获取执行者 ID 的最佳替代方法是什么?
谢谢
最佳答案
根据documentation 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();
关于java - Apache Spark : get the executor ID in the map reduce pipeline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69085481/