如何从PySpark中的map方法返回一个空(null?)项?

时间:2015-12-15 16:16:11

标签: python apache-spark pyspark rdd

我正在使用

编写地图方法
RDD.map(lambda line: my_method(line))

并且基于my_method中的特定条件(假设行以'a'开头),我想要返回一个特定的值,否则一起忽略这个项。

现在,如果项目未满足条件,后来又使用其他

,则返回-1
RDD.filter() method to remove all the ones with -1.

通过从my_method返回null,可以更好地忽略这些项目吗?

3 个答案:

答案 0 :(得分:9)

如果这样flatMap是您的朋友:

  1. 调整my_method,使其返回单个元素列表或空列表(或创建一个像What is the equivalent to scala.util.Try in pyspark?这样的包装器)

    def my_method(line):
        return [line.lower()] if line.startswith("a") else []
    
  2. 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,这是高成本的操作。