Skip to main content
 首页 » 编程设计

python之Pyspark之如何在键和值上使用广播字典过滤 RDD

2024年09月03日26yxwkf

我正在尝试根据广播变量过滤大型 RDD。

我能够执行以下操作,过滤在广播变量中作为键存在的元组。

nested_filter = {"india":'ind',"usa":'us'} 
b_filter = sc.broadcast(nested_filter) 
 
 
rdd_set = sc.parallelize([('india','ind'),('india', 'nope') , ('usa','us'), 
                ('japan','jpn'),('uruguay','urg')]) 

过滤器:

rdd_set.filter(lambda fields: fields[0] in b_filter.value).collect() 

返回:

[('india', 'ind'), ('india', 'nope'), ('usa', 'us')] 

我的问题是我想过滤广播字典中的键以及与键关联的值。

正确的结果应该是:

[('india', 'ind'), ('usa', 'us')] 

实际的 RDD 将有数十亿行行,广播字典包含数百万个键。有人可以告诉我最有效的方法吗?

请您参考如下方法:

您可以使用 items() 从字典中获取键值元组列表。然后检查该列表中是否有一行:

rdd_set.filter(lambda fields: fields in b_filter.value.items()).collect() 
#[('india', 'ind'), ('usa', 'us')]