如何在python函数中使用spark会话?

时间:2019-05-14 12:20:45

标签: apache-spark pyspark pyspark-sql

我想在python方法中使用Spark Session,但出现错误“ SparkContext只能在驱动程序上使用,而不能在工作程序上运行的代码中使用。有关更多信息,请参阅SPARK-5063。我试图从另一个方法调用的方法运行sparksession,以便在主函数中运行时可以正常工作。

    def hive_company(tuples):
        spark.sql("insert into table hive_table values(\'%s\',\'%s\')" % tuples)

    def data_set(data):
        company = data["EMPLOYER_NAME"]
        soc_name = data["SOC_NAME"]
        if (company == 'XYZ LIMITED'):
            comp_tuple = (company, soc_name)
            hive_visa.hive_company(comp_tuple)

错误:无法序列化对象:异常:您似乎正在尝试从广播变量,操作或转换引用SparkContext。 SparkContext只能在驱动程序上使用,而不能在工作程序上运行的代码中使用。有关更多信息,请参阅SPARK-5063。

2 个答案:

答案 0 :(得分:0)

这是不可能的。

代码被编写并在驱动程序上运行,驱动程序将诸如map,filter或管道式命令之类的命令作为任务发送给执行程序,以针对该执行程序上的分区运行。

该消息告诉您这不可能。

答案 1 :(得分:-1)

您必须定义SparkSession。您可以尝试以下示例-

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .master("yarn") \
    .appName("python_func_example") \
    .config("spark.some.config.option", "some-value-sample-entry") \
    .enableHiveSupport() \
    .getOrCreate()


def python_func_example (schema, table):
    query = "select * from {}.{}"
    df = spark.sql(query.format(schema, table))
    return df


if __name__ == '__main__':
    python_func_example()