不要在Spark(Python)中写无行或空行
我是Spark的新手,但我在Hadoop方面有一些经验。我正在尝试改编我在Hadoop流媒体中使用的python代码,它过滤掉一些JSON格式的推文 通常,我的函数有一个条件,如果条件为true,则打印到stdout tweet,否则不打印任何内容不要在Spark(Python)中写无行或空行,python,hadoop,apache-spark,pyspark,Python,Hadoop,Apache Spark,Pyspark,我是Spark的新手,但我在Hadoop方面有一些经验。我正在尝试改编我在Hadoop流媒体中使用的python代码,它过滤掉一些JSON格式的推文 通常,我的函数有一个条件,如果条件为true,则打印到stdout tweet,否则不打印任何内容 def filter(tweet): if criteria(tweet) is True: print json.dumps(tweet) 这样,最终的输出文件将只包含我想要的tweet 但是,在尝试使用Spark时,我必须使用
def filter(tweet):
if criteria(tweet) is True:
print json.dumps(tweet)
这样,最终的输出文件将只包含我想要的tweet
但是,在尝试使用Spark时,我必须使用return
更改print
语句,因此如果条件为真,我将返回tweet,否则返回None
def filter(tweet):
if criteria(tweet) is True:
return json.dumps(tweet)
尝试将结果保存到磁盘时出现问题。使用Pyspark的saveAsTextFile
方法,它不仅保存了我想要的tweet,还保存了条件为False时返回的None
如何避免将None
写入文件,以便只保存所需的tweet
非常感谢
Jorge如果在地图中使用函数,它不会减少元素的数量。要过滤元素,必须使用
filter
方法在map
之后测试元素是否None
,这是一个非常优雅的解决方案,它避免了链接filter
和map
,使用flatMap
:
def filter(tweet):
return [json.dumps(tweet)] if criteria(tweet) is True else []
some_rdd.flatMap(filter)
你为什么不能直接返回“”?如果这不起作用,你就不能对返回的json转储文件做一些简单的后处理。这是一个很好的观点,但是它不是要打印一个空行吗?。。。。。我会尽力以防万一。谢谢你的回复。