我是cask cdap和Hadoop环境的新手。
我正在创建一个管道,我想使用PySpark程序。我有火花程序的所有脚本,当我通过命令测试它时它会起作用,如果我尝试将它复制粘贴到cdap管道中,它就不会发生。
它在日志中给我一个错误:
NameError: name 'SparkSession' is not defined
我的脚本以这种方式启动:
from pyspark.sql import *
spark = SparkSession.builder.getOrCreate()
from pyspark.sql.functions import trim, to_date, year, month
sc= SparkContext()
我该如何解决?
答案 0 :(得分:0)
Spark通过SparkContext
与本地运行的spark集群连接。可以在https://stackoverflow.com/a/24996767/5671433找到更好的解释。
要初始化SparkSession
,必须初始化SparkContext
。
一种方法是编写一个初始化所有上下文和一个spark会话的函数。
def init_spark(app_name, master_config):
"""
:params app_name: Name of the app
:params master_config: eg. local[4]
:returns SparkContext, SQLContext, SparkSession:
"""
conf = (SparkConf().setAppName(app_name).setMaster(master_config))
sc = SparkContext(conf=conf)
sc.setLogLevel("ERROR")
sql_ctx = SQLContext(sc)
spark = SparkSession(sc)
return (sc, sql_ctx, spark)
然后可以将其称为
sc, sql_ctx, spark = init_spark("App_name", "local[4]")