Spark:为什么我的UDF没有在rdd map中调用?

时间:2017-07-28 18:16:08

标签: python apache-spark pyspark

我有以下代码

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从未被调用过?任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

未调用它,因为map是转换。除非后面跟着一个动作,否则Spark没有理由执行它。

此外,您的代码不是Apache Spark的理想选择:

  • print将数据输出到worker的标准输出。
  • pickle.dump将写入worker的本地文件系统,当在map中执行时,重写输出。

您可以尝试RDD.foreachRDD.saveAsPickleFile