【问题标题】:How to ignore empty list when using pyspark `map` function?使用 pyspark `map` 函数时如何忽略空列表?
【发布时间】:2019-06-08 05:16:26
【问题描述】:
假设我正在执行一个简单的 pyspark 脚本data_rdd.map(some_fun).toDF(),其中data_rdd 仅包含要由some_fun 处理的记录序列。 some_fun 会返回一个列表,有时它是一个空列表。下面显示了一个示例输出,您可以在其中看到空列表。
我的问题是,有没有办法在不使用昂贵的where 或filter 的情况下过滤掉这些空列表?无论如何让map 本身忽略空列表?谢谢!
【问题讨论】:
标签:
apache-spark
pyspark
rdd
【解决方案1】:
我们可以使用org.apache.spark.rdd.RDD#flatMap
data_rdd.flatMap(x => {
val res = some_fun(x)
if (res.nonEmpty) Seq(res) else Seq.empty
})
这在一个函数中执行操作,但在内存消耗方面仍然很昂贵。
考虑到它是通过 codegen 发生的,使用 filter 在所花费的时间和资源利用率方面更好