迭代列表的每个元素并传递给函数

时间:2018-03-02 06:58:30

标签: python apache-spark pyspark pyspark-sql databricks

我想迭代列表的每个元素并将其传递给函数。 这是我尝试过的但却低于错误。

import call_functions
newObject = call_functions.call_functions_class()
size_DF = newObject.descr_size(sc, dataBase)
size_RDD = sc.parallelize(size_DF).map(lambda x : x[0])

def full_item_new(sc, dataBase, length, end_date):
    newObject.full_item(sc, dataBase, length, end_date)
size_RDD.map(lambda x : full_item_new(sc, dataBase, x[0], end_date)).collect()

def full_item(sc, dataBase, length, end_date):
    sqlContext = SQLContext(sc)
    insertDF = sqlContext.sql("insert into -----")
    return insertDF

错误

  

“您似乎正在尝试从广播中引用SparkContext”   例外:您似乎尝试从广播变量,操作或转换引用SparkContext。 SparkContext只能在驱动程序上使用,而不能在工作程序上运行的代码中使用。有关更多信息,请参阅SPARK-5063。

1 个答案:

答案 0 :(得分:0)

如果没有看到函数full_item_new,很难回答,只是看看args,你提供sc,这显然是你的火花上下文变量。因此,这意味着您在rdd上执行转换时尝试使用sc执行操作或转换。这根本不可能。

对工作人员执行

full_item_new,但sc只能在驱动程序上使用。