我正在使用
编写地图方法RDD.map(lambda line: my_method(line))
并且基于my_method中的特定条件(假设行以'a'开头),我想要返回一个特定的值,否则一起忽略这个项。
现在,如果项目未满足条件,后来又使用其他
,则返回-1RDD.filter() method to remove all the ones with -1.
通过从my_method返回null,可以更好地忽略这些项目吗?
答案 0 :(得分:9)
如果这样flatMap
是您的朋友:
调整my_method
,使其返回单个元素列表或空列表(或创建一个像What is the equivalent to scala.util.Try in pyspark?这样的包装器)
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']
答案 1 :(得分:2)
如果您想根据某些条件忽略这些项目,那么为什么不单独使用filter
?为什么要使用地图?如果要对其进行变换,可以在过滤器的输出上使用map。
答案 2 :(得分:0)
filter
是转换方法。由于创建了新的RDD,这是高成本的操作。