Python Pyspark:json对象中的rdd 这是家庭作业

Python Pyspark:json对象中的rdd 这是家庭作业,python,pyspark,Python,Pyspark,hw2-files-10mb.txt是json数据 rdd = sc.textFile('./hw2-files-10mb.txt') rdd = rdd.map(json.loads) Output of rdd.take(1): [{'created_at': 'Tue Feb 23 17:42:31 +0000 2016', 'user': {'id': 470520068, 'id_str': '470520068', 'name': 'Marni Halasa'

hw2-files-10mb.txt是json数据

rdd = sc.textFile('./hw2-files-10mb.txt')
rdd = rdd.map(json.loads)

Output of rdd.take(1):

[{'created_at': 'Tue Feb 23 17:42:31 +0000 2016',
  'user': {'id': 470520068,
    'id_str': '470520068',
    'name': 'Marni Halasa',
    'screen_name': 'MarniHalasa1',
    'location': 'NYC',
....]
问题:

1) 如何以rdd方式在“用户”中选择“id_str”

我尝试了将rdd映射到func的方法,该方法返回字段\u list=['user.id\u str'],但不起作用

field_list = ['user.id_str', 'text']
def f(x):
d = {}
for k in x:
    if k in field_list:
        d[k] = x[k]
return d

rdd1 = rdd.map(f)

Output:
[{'text': "I'm voting 4 #BernieSanders bc he doesn't ride a CAPITALIST PIG adorned w/ #GoldmanSachs $. SYSTEM RIGGED CLASS WAR"}]
2) 如何删除“created_at”字段不存在的tweet

我下面的代码不起作用。使用rdd.count()时返回错误

我的预期产出:

1) 删除所有断开的tweet('created_at'字段为空)

2) 一对RDD(user_id,text),其中user_id是用户字典的“id_str”数据字段

谢谢。

首先解决2)点,因为在提取了
'user.id\u str'
'text'
之后,将不会有在
处创建的
字段留下来进行过滤

2) 只需检查是否存在
'created_at'
。此外,您可以一次完成所有操作

rdd = sc.textFile('./hw2-files-10mb.txt')\
            .map(json.loads)\
            .filter(lambda row: 'created_at' in row.keys())
1) 从json对象提取值不需要函数

rdd = rdd.map(lambda row:(row['user']['id_str'], 'text'))
print rdd.take(1)

欢迎来到堆栈溢出。以下是如何提高你的帖子质量——这会让你更快地得到更好的答案。(1) 以内联方式提供示例数据,而不是发布文件的部分输出。它不一定是实际的数据(尽管这是最好的),而是允许您生成一个;(2) 提供预期输出。(例如:一旦选择了
id\u str
,您想用它做什么?记住Spark有惰性求值);(3) 这不是必须的,但仍然是一个好主意,将这篇文章标记为家庭作业,当它是(你的文件名表明这是一个家庭作业)。注意。谢谢:)这篇作业的正确答案1)rdd=rdd.map(lambda行:(行['user']['id\u str'],行['text']))
rdd = rdd.map(lambda row:(row['user']['id_str'], 'text'))
print rdd.take(1)