RDD foreach方法没有提供任何结果

时间:2018-01-19 09:06:05

标签: apache-spark foreach pyspark rdd

我想了解foreach方法的工作原理。在我的jupyter笔记本中,我尝试过:

def f(x): print(x)
a = sc.parallelize([1, 2, 3, 4, 5])
b = a.foreach(f)
print(type(b))
<class 'NoneType'>

我可以毫无问题地执行它,但除了print(type(b))部分之外我没有任何输出。 foreach不返回任何内容,只返回无类型。我不知道foreach应该做什么,以及如何使用它。你能解释一下它的用途吗?

1 个答案:

答案 0 :(得分:3)

foreach是一个动作,不会返回任何内容;所以,你不能像你一样使用它,即将它分配给另一个变量,如b = a.foreach(f)。来自Learning Spark,p。 41-42:

enter image description here

enter image description here

调整简单示例from the docs,在PySpark终端中运行:

>>> def f(x): print(x)
>>> a = sc.parallelize([1, 2, 3, 4, 5])
>>> a.foreach(f)
5
4
3
1
2

(注意:不确定Jupyter,但上面的代码不会在Databricks笔记本中产生任何打印结果。)

您也可以在this thread帮助中找到答案。