我想在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。
答案 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()