我是新来的,所以请耐心等待。
我有一个JSON文件,其中每一行都有以下架构:
{
'id': 2,
'version': 7.3,
'participants': range(10)
}
参与者是一个嵌套的领域。
input_file = 'data.json'
df = db.read_text(input_file).map(json.loads)
我可以做任何一件事:
df.pluck(['id', 'version'])
或
df.pluck('participants').flatten()
但是我怎样才能做同样的Spark爆炸,我可以同时选择id
,version
并展平participants
?
所以输出结果为:
{'id': 2, 'version': 7.3, 'participants': 0}
{'id': 2, 'version': 7.3, 'participants': 1}
{'id': 2, 'version': 7.3, 'participants': 2}
{'id': 2, 'version': 7.3, 'participants': 3}
...
答案 0 :(得分:0)
可以编写自定义函数来读取&使用dask.bag.from_sequence
def mapper(row, denest_field):
js = json.loads(row)
for v in js[denest_field]:
yield {'id': js['id'], denest_field: v, 'version': js['version']}
def yield_unnested(fname, denest_field):
with open (fname) as f:
for row in f:
yield from mapper(row, denest_field)
我已保存名为'data.json'
的文件,其中包含以下内容
{"id": 2, "version": 7.3, "participants": [0,1,2,3,4,5,6,7,9,9]}
然后阅读from_sequence
df = db.from_sequence(yield_unnested('data.json', 'participants'))
list(df) # outputs:
[{'id': 2, 'participants': 0, 'version': 7.3},
{'id': 2, 'participants': 1, 'version': 7.3},
{'id': 2, 'participants': 2, 'version': 7.3},
{'id': 2, 'participants': 3, 'version': 7.3},
{'id': 2, 'participants': 4, 'version': 7.3},
{'id': 2, 'participants': 5, 'version': 7.3},
{'id': 2, 'participants': 6, 'version': 7.3},
{'id': 2, 'participants': 7, 'version': 7.3},
{'id': 2, 'participants': 9, 'version': 7.3},
{'id': 2, 'participants': 9, 'version': 7.3}]
请注意,我是dask的新手,这可能不是最有效的方法。