我正在编写一个map方法
RDD.map(lambda line: my_method(line))
并且基于my_method中的特定条件(假设行以'a'开头),我想要返回一个特定值,否则一起忽略该项.
现在,如果在项目上没有满足条件并且稍后使用另一个条件,则返回-1
RDD.filter() method to remove all the ones with -1.
有什么更好的方法可以通过从my_method返回null来忽略这些项目?
在这种情况下,这flatMap
是你的朋友:
调整my_method
所以它返回单个元素列表或空列表(或创建一个像这里的包装器什么相当于pyspark中的scala.util.Try?)
def my_method(line): return [line.lower()] if line.startswith("a") else []
flatMap
rdd = sc.parallelize(["aDSd", "CDd", "aCVED"]) rdd.flatMap(lambda line: my_method(line)).collect() ## ['adsd', 'acved']