NameError:未定义名称“SparkSession”

时间:2018-04-09 10:39:50

标签: apache-spark pyspark

我是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()

我该如何解决?

1 个答案:

答案 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]")