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

Lon*_*guy 4 python apache-spark rdd pyspark

我正在编写一个map方法

RDD.map(lambda line: my_method(line))
Run Code Online (Sandbox Code Playgroud)

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

现在,如果在项目上没有满足条件并且稍后使用另一个条件,则返回-1

RDD.filter() method to remove all the ones with -1.
Run Code Online (Sandbox Code Playgroud)

有什么更好的方法可以通过从my_method返回null来忽略这些项目?

zer*_*323 9

在这种情况下,这flatMap是你的朋友:

  1. 调整my_method所以它返回单个元素列表或空列表(或创建一个像这里的包装器什么相当于pyspark中的scala.util.Try?)

    def my_method(line):
        return [line.lower()] if line.startswith("a") else []
    
    Run Code Online (Sandbox Code Playgroud)
  2. flatMap

    rdd = sc.parallelize(["aDSd", "CDd", "aCVED"])
    
    rdd.flatMap(lambda line: my_method(line)).collect()
    ## ['adsd', 'acved']
    
    Run Code Online (Sandbox Code Playgroud)