我有以下代码
def get_general_popularity_count():
def test(t):
a = 1 # this is just a random variable for testing
print "a"
pickle.dump(a, open("a.p", "wb"))
count_dict = pickle.load(open("list.p","rb"))
rdd = session.sparkContext.parallelize(count_dict)
rdd.map(lambda x:test(x))
但是,没有打印任何内容,而且pickle也没有保存文件。事实上,我知道UDF从未被调用,因为一旦我在test(x)
中出现语法错误,但程序从未捕获过它。
那么为什么我的UDF从未被调用过?任何帮助表示赞赏
答案 0 :(得分:1)
未调用它,因为map
是转换。除非后面跟着一个动作,否则Spark没有理由执行它。
此外,您的代码不是Apache Spark的理想选择:
print
将数据输出到worker的标准输出。pickle.dump
将写入worker的本地文件系统,当在map
中执行时,重写输出。您可以尝试RDD.foreach
或RDD.saveAsPickleFile