【问题标题】:Selecting and grouping dictionary entries from json dictionary RDD by key using spark python使用spark python按键从json字典RDD中选择和分组字典条目
【发布时间】:2018-10-15 20:36:37
【问题描述】:

我用的是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"

...

我想从 RDD 中的每个条目中收集 'str_id' 和 'text' 值,以创建一个包含以下条目的新 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 对象。

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

谢谢

【问题讨论】:

  • 欢迎堆栈溢出。您的问题有点不清楚,如果您可以提供reproducible example 会很有帮助,最好提供用户可以剪切和粘贴的代码以重新创建一小部分数据。

标签: python apache-spark pyspark mapreduce rdd


【解决方案1】:

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

>>> 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')]

【讨论】:

    猜你喜欢
    • 2017-04-30
    • 2020-04-16
    • 1970-01-01
    • 2017-02-24
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    相关资源
    最近更新 更多