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的方法,该函数返回field_list = ['user.id_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'字段的推文?
我下面的代码不起作用。当我使用rdd.count()
时返回错误rdd = rdd.filter(lambda row: row['created_at'] is not None)
我的预期输出:
1)删除所有损坏的推文(“ created_at”字段为空)
2)(user_id,文本)的一对RDD,其中user_id是用户字典的“ id_str”数据字段。
谢谢。
答案 0 :(得分:0)
首先解决2)点,因为提取了'user.id_str'
和'text'
之后,将没有created_at
字段可供过滤。
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)