Apache spark Spark:将资源文件路径发送到Spark执行器
我需要将资源文件路径的位置从驱动程序传递给执行器。 为了实现这一点,我试图设置executor enviornmnet变量。 代码如下所示:Apache spark Spark:将资源文件路径发送到Spark执行器,apache-spark,apache-spark-sql,spark-streaming,Apache Spark,Apache Spark Sql,Spark Streaming,我需要将资源文件路径的位置从驱动程序传递给执行器。 为了实现这一点,我试图设置executor enviornmnet变量。 代码如下所示: class AppMain{ def main(args : Array[String]){ val resourcePath = "/a/" sparkConf.setExecutorEnv("RESOURCEPATH", resourcePath) } class B{ println(System.getenv("RESOURCE
class AppMain{
def main(args : Array[String]){
val resourcePath = "/a/"
sparkConf.setExecutorEnv("RESOURCEPATH", resourcePath)
}
class B{
println(System.getenv("RESOURCEPATH")) // This returns null
}
}
关于如何解决这个问题或我在这里遗漏了什么,您有什么建议吗?在spark中,您可以直接使用所调用操作的闭包中的任何变量
String my_path="path";
rdd.map(new Function<Tuple2<ImmutableBytesWritable,Result>, String>() {
@Override
public String call(Tuple2<ImmutableBytesWritable, Result> immutableBytesWritableResultTuple2) throws Exception {
return my_path;
}
});
String my_path=“path”;
map(新函数(){
@凌驾
公共字符串调用(Tuple2 immutableBytesWritableResultTuple2)引发异常{
返回我的路径;
}
});
建议:如果您在本地进行测试,请检查是否创建了执行器进程,或者执行器是否在与驱动程序相同的JVM中运行。因为环境变量仅在executor启动时设置。在spark中,您可以直接使用所调用操作的闭包中的任何变量
String my_path="path";
rdd.map(new Function<Tuple2<ImmutableBytesWritable,Result>, String>() {
@Override
public String call(Tuple2<ImmutableBytesWritable, Result> immutableBytesWritableResultTuple2) throws Exception {
return my_path;
}
});
String my_path=“path”;
map(新函数(){
@凌驾
公共字符串调用(Tuple2 immutableBytesWritableResultTuple2)引发异常{
返回我的路径;
}
});
建议:如果您在本地进行测试,请检查是否创建了执行器进程,或者执行器是否在与驱动程序相同的JVM中运行。因为环境变量仅在executor启动时设置。谢谢。。但是我的应用程序有很多类和对象。在实例化对象时,我需要环境变量。我不知道如何通过这种方法实现这一目标。我正在集群中测试,我可以在executor logsThanks中看到env值为null。。但是我的应用程序有很多类和对象。在实例化对象时,我需要环境变量。我不知道如何通过这种方法实现这一目标。我正在集群中测试,我可以在执行器日志中看到env值为null