Apache Spark:在 map reduce 管道中获取执行者 ID
Posted
技术标签:
【中文标题】Apache Spark:在 map reduce 管道中获取执行者 ID【英文标题】:Apache Spark: get the executor ID in the map reduce pipeline 【发布时间】:2021-09-07 09:15:36 【问题描述】:关于如何在 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 executor ID,以便进行一些转换。
由于需要Spark executor ID,所以我使用了官方文档中的SparkEnv.executorId()
。
不幸的是,上面的方法不起作用,因为Non-static method 'executorId()' cannot be referenced from a static context
SparkEnv.executorId()
在这种情况下甚至是获取执行者 ID 的好方法吗?
如果是,请问如何解决这个非静态方法 'executorId()' 的问题?
如果不是,请问获取执行者 ID 的最佳选择是什么?
谢谢
【问题讨论】:
【参考方案1】:根据documentationSparkEnv
类有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();
【讨论】:
谢谢@鲍里斯! (希望你在它被删除之前得到它?)以上是关于Apache Spark:在 map reduce 管道中获取执行者 ID的主要内容,如果未能解决你的问题,请参考以下文章
Spark:在 SparkSql 中使用 map 和 reduce
`map` 和 `reduce` 方法在 Spark RDD 中如何工作?
Apache Spark reductionByWindow 函数在哪里执行?