Python Pyspark:json对象中的rdd 这是家庭作业
hw2-files-10mb.txt是json数据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'
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)