gpt4 book ai didi

python - Pyspark:json对象中的rdd

转载 作者:行者123 更新时间:2023-12-01 08:59:02 24 4
gpt4 key购买 nike

这是家庭作业

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方式选择'user'中的'id_str'?

我尝试了将 rdd 映射到返回 field_list = ['user.id_str'] 的 func 的方法,但它不起作用。

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, text) RDD,其中 user_id 是用户字典的 'id_str' 数据字段。

谢谢。

最佳答案

先解决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)

关于python - Pyspark:json对象中的rdd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52616773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com