如何从 Pyspark 中的 RDD 中过滤

Posted

技术标签:

【中文标题】如何从 Pyspark 中的 RDD 中过滤【英文标题】:How to filter from RDD in Pypsark 【发布时间】:2019-09-05 17:11:31 【问题描述】:

我想从下面的 RDD 中过滤数据。

  [Row(item_id='2388457', amount='900', city='Cincinnati'),
   Row(item_id='2455019', amount='3500',city='Cleveland'),
   Row(item_id='2455123', amount='1500',city='Cleveland')]

我需要过滤 (city='Cleveland and amount>1000) 我该怎么做? 谢谢。

【问题讨论】:

你在哪里卡住了?你试过filter 功能吗?您的代码是否产生错误的输出?错误信息? rdd.filter(city='Cleveland').take(5) 不工作 你必须将一个函数传递给filter - rdd.filter(lambda x: x['city'] == 'Kayseri') 双等号用于相等性检查。 rdd.filter( lambda x : (x['city'] == 'Cleveland') & (x['amount'] > 1000)).take(5)[Row(item_id=2455019, amount=3500, city=u'Cleveland'), Row(item_id=2455123, amount=1500, city=u'Cleveland')] 【参考方案1】:

您可以使用 lambda 表达式filter RDD:

filtered_rdd = my_rdd.filter(lambda x: x['city'] == 'Cleveland' and x['amount'] > 1000)

您可能还需要考虑将 RDD 中的数字转换为 float/int 值。

【讨论】:

以上是关于如何从 Pyspark 中的 RDD 中过滤的主要内容,如果未能解决你的问题,请参考以下文章

在pyspark中过滤两个RDD

Pyspark - 使用广播字典中的日期过滤 RDD

如何在过滤器pyspark RDD中过滤掉某种模式[重复]

过滤掉pyspark RDD中的非数字值

如何替换/删除 PySpark RDD 中的正则表达式?

使用 pyspark 过滤数组中基于 RDD 的值