java - Apache Spark : get the executor ID in the map reduce pipeline

标签 java apache-spark

关于如何在 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/

相关文章:

scala - Apache Spark - 注册 UDF - 返回数据帧

dataframe - Spark : How to aggregate/reduce records based on time difference?

azure - 数据 block : difference between mount and direct access of Data Lake Storage Gen 2

scala - 如何传递 Scala UserDefinedFunction 其中输出是复杂类型(使用 StructType 和 StructField)以从 Pyspark 使用

java - 不断增长的 Java 进程驻留内存使用 (RSS)

java - 代码性能

java - 如何修复 java.lang.VerifyError?

Java Play 2 - 模板化

java - lambda 创建后的序列化

scala - 从 Spark 中以 Map(String,List(String)) 形式列出/检索 HDFS 分区