【问题标题】:Apache Spark: get the executor ID in the map reduce pipelineApache Spark:在 map reduce 管道中获取执行者 ID
【发布时间】: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 的最佳选择是什么?

谢谢

【问题讨论】:

    标签: java apache-spark


    【解决方案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();
    

    【讨论】:

    • 谢谢@鲍里斯! (希望你在它被删除之前得到它?)
    猜你喜欢
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2015-05-06
    相关资源
    最近更新 更多