Ser*_*nov 8 apache-spark apache-spark-sql pyspark pyspark-sql
我正在使用Spark 2.0和PySpark.
我SparkSession通过GetOrCreate2.0中引入的方法重新定义参数:
此方法首先检查是否存在有效的全局默认SparkSession,如果是,则返回该值.如果不存在有效的全局默认SparkSession,则该方法将创建新的SparkSession并将新创建的SparkSession指定为全局默认值.
如果返回现有SparkSession,则此构建器中指定的配置选项将应用于现有SparkSession.
到现在为止还挺好:
from pyspark import SparkConf
SparkConf().toDebugString()
'spark.app.name=pyspark-shell\nspark.master=local[2]\nspark.submit.deployMode=client'
spark.conf.get("spark.app.name")
'pyspark-shell'
Run Code Online (Sandbox Code Playgroud)
然后我重新定义SparkSession配置,并承诺在WebUI中查看更改
appName(name)
设置应用程序的名称,该名称将显示在Spark Web UI中.
c = SparkConf()
(c
.setAppName("MyApp")
.setMaster("local")
.set("spark.driver.memory","1g")
)
from pyspark.sql import SparkSession
(SparkSession
.builder
.enableHiveSupport() # metastore, serdes, Hive udf
.config(conf=c)
.getOrCreate())
spark.conf.get("spark.app.name")
'MyApp'
Run Code Online (Sandbox Code Playgroud)
现在,当我去localhost:4040,我希望看到MyApp一个应用程序名称.
但是,我仍然看到 pyspark-shell application UI
我哪里错了?
提前致谢!
use*_*411 10
我相信文档在这里有点误导,当你使用Scala时,你实际上会看到这样的警告:
... WARN SparkSession$Builder: Use an existing SparkSession, some configuration may not take effect.
Run Code Online (Sandbox Code Playgroud)
在Spark 2.0之前更明显的是在上下文之间有明确的分离:
SparkContext配置无法在运行时修改.您必须先停止现有的上下文.SQLContext 配置可以在运行时修改. spark.app.name像许多其他选项一样,SparkContext在不停止上下文的情况下绑定,也无法修改.
重用现有SparkContext/SparkSession
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
spark.conf.get("spark.sql.shuffle.partitions")
Run Code Online (Sandbox Code Playgroud)
String = 200
Run Code Online (Sandbox Code Playgroud)
val conf = new SparkConf()
.setAppName("foo")
.set("spark.sql.shuffle.partitions", "2001")
val spark = SparkSession.builder.config(conf).getOrCreate()
Run Code Online (Sandbox Code Playgroud)
... WARN SparkSession$Builder: Use an existing SparkSession ...
spark: org.apache.spark.sql.SparkSession = ...
Run Code Online (Sandbox Code Playgroud)
spark.conf.get("spark.sql.shuffle.partitions")
Run Code Online (Sandbox Code Playgroud)
String = 2001
Run Code Online (Sandbox Code Playgroud)
虽然spark.app.name配置更新:
spark.conf.get("spark.app.name")
Run Code Online (Sandbox Code Playgroud)
String = foo
Run Code Online (Sandbox Code Playgroud)
它不会影响SparkContext:
spark.sparkContext.appName
Run Code Online (Sandbox Code Playgroud)
String = Spark shell
Run Code Online (Sandbox Code Playgroud)
停止现有SparkContext/SparkSession
现在让我们停止会话并重复该过程:
spark.stop
val spark = SparkSession.builder.config(conf).getOrCreate()
Run Code Online (Sandbox Code Playgroud)
... WARN SparkContext: Use an existing SparkContext ...
spark: org.apache.spark.sql.SparkSession = ...
Run Code Online (Sandbox Code Playgroud)
spark.sparkContext.appName
Run Code Online (Sandbox Code Playgroud)
String = foo
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我们停止会话时,我们仍会收到有关使用现有的警告SparkContext,但您可以检查它是否已停止.
| 归档时间: |
|
| 查看次数: |
2597 次 |
| 最近记录: |