python - Spark : Why is my UDF not called in rdd map?

标签 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 从未被调用过?感谢任何帮助

最佳答案

它不会被调用,因为 map 是一个转换。除非它后面跟着一个 Action ,否则 Spark 根本没有理由执行它。

此外,您的代码对于 Apache Spark 来说不是一个好的选择:

  • print 将数据输出到工作器的标准输出。
  • pickle.dump 将写入工作线程的本地文件系统,并在 map 中像这样执行时,再次覆盖输出。

您可以尝试RDD.foreachRDD.saveAsPickleFile

关于python - Spark : Why is my UDF not called in rdd map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45379964/

相关文章:

java - 为什么 Kafka 消费者忽略了我在 auto.offset.reset 参数中的 "earliest"指令,因此没有从绝对第一个事件中读取我的主题?

apache-spark - PySpark:减去数据框并忽略某些列

python - 将包含列表的 python 2d 列表写入 parquet 文件

pyspark - 如何在pyspark中的groupBy之后获得每个计数的总数百分比?

python multiprocessing - 重新运行初始化程序,或在所有工作人员上运行函数?

python - 如何用python3制作unicode字符串

scala - 如何从列出的日期中获取最新日期以及总数?

python - Pyspark:通过搜索字典替换列中的值

python - Golang单元测试python函数

python - 这段 Python 代码块的作用是什么?