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

How can I return an empty (null?) item back from a map method in PySpark?

我正在使用

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

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

目前,我 returning -1 如果该项目不满足条件,稍后使用另一个

RDD.filter() method to remove all the ones with -1.

有什么更好的方法可以通过 return 从 my_method 中输入 null 来忽略这些项目?

如果这样的flatMap是你的朋友:

  1. 调整 my_method 使其 returns 为单个元素列表或空列表(或像这里 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']
    

如果你想根据某些条件忽略这些项目,那么为什么不单独使用 filter?为什么要使用地图?如果你想转换它,你可以在过滤器的输出上使用地图。

filter是转换方法。因为创建了新的RDD,所以是高成本的操作。