我有以下代码
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 从未被调用过?感谢任何帮助
最佳答案
它不会被调用,因为 map
是一个转换。除非它后面跟着一个 Action ,否则 Spark 根本没有理由执行它。
此外,您的代码对于 Apache Spark 来说不是一个好的选择:
print
将数据输出到工作器的标准输出。pickle.dump
将写入工作线程的本地文件系统,并在map
中像这样执行时,再次覆盖输出。
您可以尝试RDD.foreach
或RDD.saveAsPickleFile
关于python - Spark : Why is my UDF not called in rdd map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45379964/