使用 spark python 按键从 json 字典 RDD 中选择和分组字典条目



我正在使用 spark,用 python 编码

我有一个由json对象组成的Sparkcontent RDD,这些对象是字典。我想从RDD中的每个条目(json对象(中选择和分组特定的键/值对,并将它们分组,然后收集它们。

例如:RDD 中的每个条目都包含许多(键:值(对,其中包括

the first entry contains:  'str_id' : 000000 ,'text' : "text here"
the second entry contains: 'str_id' : 000001 ,'text' : "new text"

Id 喜欢从 RDD 中的每个条目中一起收集"str_id"和"文本"值,以创建一个包含以下条目的新 RDD:

[(000000,"此处文本"(, (000001,"新文本"(,...]

不幸的是,我无法弄清楚如何映射这些键:值对,因为字典键:值对位于每个RDD条目内。

任何帮助将不胜感激

编辑:已解决

我想在RDD系统中工作,因为我正在处理大量数据,这就是为什么我没有使用.collect((。

rdd = sc.textFile(./json-data.txt)
rdd_entry = rdd.map(lambda x: jform(x) 
.map(lambda y: val_get(y,"text","user"))

其中 val_get(( 是一个函数,它返回组合在元组中的字典条目,jform(( 将字符串转换为 json 对象。

我意识到我收到错误的原因是没有过滤掉RDD中松散的非json对象,这些对象通过了第一个映射。我最初认为从RDD中的字典条目映射是行不通的,但我错了。

谢谢

我不清楚大小写,但您可以使用如下所示的内容获得预期的输出

>>> rdd = sc.parallelize([{'str_id':'000000' ,'text':'text here'},{'str_id':'000001' ,'text':'new text'}])
>>> rdd.collect()
[{'str_id': '000000', 'text': 'text here'}, {'str_id': '000001', 'text': 'new text'}]
>>> [tuple(k.values()) for k in rdd.collect()]
[('000000', 'text here'), ('000001', 'new text')]

最新更新