如何从 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 中过滤的主要内容,如果未能解决你的问题,请参考以下文章