我遇到了在PySpark中配置设置的各种方法。我想知道什么时候应该使用下面的每一种方法。下面的三个选项都是等价的吗?
spark.conf.set()spark.sparkContext._conf.set()spark.sparkContext._jsc.hadoopConfiguration().set()
spark.conf.set()
spark.sparkContext._conf.set()
spark.sparkContext._jsc.hadoopConfiguration().set()
字符串
rpppsulh1#
前两个是相同的,后一个你可能永远不会使用。名字开头的“_”意味着你不应该使用它们。spark.conf Package 了self._jsparkSession.conf()。上下文变量setConf调用self.sparkSession.conf.set,即上下文委托给会话conf。对于Hadoop配置,你最好使用spark session builder来访问它,例如:
sparkSessionBuilder.config("spark.hadoop.fs.file.impl", "..")
字符串然后在引导任何Hadoop功能时使用spark.hadoop模式,例如在Windows上使用barenakedfs时需要使用该模式。直接使用Hadoop配置已经可以强制引导,从而使路由无效(特别是对于fs ')。编辑:(上面的内容不够清楚)此代码:
SparkSession spark = SparkSession.builder().appName("Foo Bar").master("local").getOrCreate();spark.sparkContext().hadoopConfiguration().setClass("fs.file.impl", BareLocalFileSystem.class, FileSystem.class);
SparkSession spark = SparkSession.builder().appName("Foo Bar").master("local").getOrCreate();
spark.sparkContext().hadoopConfiguration().setClass("fs.file.impl", BareLocalFileSystem.class, FileSystem.class);
型将无法加载文件系统,因为调用getOrCreate已经强制了fs注册。如果你不想控制spark行为,而是想让你的udf使用来自驱动程序的配置集,你应该首选在代码中定义的常量。会话,因此配置,不存在于执行器上,内部配置共享(SQLConf)不会暴露给python API中的用户。
1条答案
按热度按时间rpppsulh1#
前两个是相同的,后一个你可能永远不会使用。名字开头的“_”意味着你不应该使用它们。
spark.conf Package 了self._jsparkSession.conf()。上下文变量setConf调用self.sparkSession.conf.set,即上下文委托给会话conf。
对于Hadoop配置,你最好使用spark session builder来访问它,例如:
字符串
然后在引导任何Hadoop功能时使用spark.hadoop模式,例如在Windows上使用barenakedfs时需要使用该模式。直接使用Hadoop配置已经可以强制引导,从而使路由无效(特别是对于fs ')。
编辑:(上面的内容不够清楚)
此代码:
型
将无法加载文件系统,因为调用getOrCreate已经强制了fs注册。
如果你不想控制spark行为,而是想让你的udf使用来自驱动程序的配置集,你应该首选在代码中定义的常量。会话,因此配置,不存在于执行器上,内部配置共享(SQLConf)不会暴露给python API中的用户。