【发布时间】:2018-07-04 06:02:58
【问题描述】:
我是 Pyspark 中的菜鸟,我假装玩了几个函数,以更好地了解如何在更现实的场景中使用它们。有一段时间,我尝试将特定函数应用于 RDD 中的每个数字。我的问题基本上是,当我尝试打印从我的 RDD 中获取的内容时,结果为 None
我的代码:
from pyspark import SparkConf , SparkContext
conf = SparkConf().setAppName('test')
sc = SparkContext(conf=conf)
sc.setLogLevel("WARN")
changed = []
def div_two (n):
opera = n / 2
return opera
numbers = [8,40,20,30,60,90]
numbersRDD = sc.parallelize(numbers)
changed.append(numbersRDD.foreach(lambda x: div_two(x)))
#result = numbersRDD.map(lambda x: div_two(x))
for i in changed:
print(i)
我很欣赏一个关于为什么列表中出现 Null 的清晰解释,以及使用 foreach 实现这一目标的正确方法应该是什么。
谢谢
【问题讨论】:
-
因为 RDD 上的
foreach返回 Unit。 -
对不起@Psidom你能详细说明你的答案吗我很感激谢谢
-
看看
numbersRDD.foreach(lambda x: div_two(x))。是无类型吗?还是你的意思是numbersRDD.map(lambda x: div_two(x))? -
我的意思是 foreach ,我发布了地图作为评论,因为我知道地图会给我正确的结果,因为它返回一个新的转换 RDD
-
好的。是的。
foreach不起作用,因为它不返回任何内容。所以你附加到列表中的基本上是None。
标签: apache-spark pyspark spark-streaming