PySpark 过滤元素列表,然后合并回来

PySpark filter a list of element and then merge back

我的 rdd 包含一对 IDs 和一个 list 项目。例如,每个项目都会像 (1, [a, b, c])。我需要对此项应用 filter。假设我不想在 list.

我目前的方法是使用 flatMapValues 将项目分解为键值对。 filter 并使用 groupByKey 将它们合并回 (1, [b, c]).

在我做了一些研究之后,当数据量很大时,groupByKey 似乎很糟糕。此外,似乎我正在分解 list,而他们在 list 之后将其合并回来似乎是多余的。有没有办法在不破坏 arraymerge 的情况下完成此操作?

您可以使用列表理解 mapValues:

rdd2 = rdd1.mapValues(lambda l: [i for i in l if i != 'a'])