我如何 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
是你的朋友:
调整 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 []
flatMap
rdd = sc.parallelize(["aDSd", "CDd", "aCVED"])
rdd.flatMap(lambda line: my_method(line)).collect()
## ['adsd', 'acved']
如果你想根据某些条件忽略这些项目,那么为什么不单独使用 filter
?为什么要使用地图?如果你想转换它,你可以在过滤器的输出上使用地图。
filter
是转换方法。因为创建了新的RDD,所以是高成本的操作。
我正在使用
编写地图方法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
是你的朋友:
调整
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 []
flatMap
rdd = sc.parallelize(["aDSd", "CDd", "aCVED"]) rdd.flatMap(lambda line: my_method(line)).collect() ## ['adsd', 'acved']
如果你想根据某些条件忽略这些项目,那么为什么不单独使用 filter
?为什么要使用地图?如果你想转换它,你可以在过滤器的输出上使用地图。
filter
是转换方法。因为创建了新的RDD,所以是高成本的操作。