gpt4 book ai didi

python - 使用 Python 快速解析一个巨大的 12 GB JSON 文件

转载 作者:行者123 更新时间:2023-12-04 01:12:28 25 4
gpt4 key购买 nike

我有一个 12GB 的 JSON 文件,每一行都包含有关一篇科学论文的信息。这是它的样子

enter image description here

我想解析它并创建 3 个 pandas 数据框,其中包含有关 field 、作者以及作者在 field 中发表了多少次的信息。下面你可以看到我写的代码。我的问题是这段代码需要很多天才能运行。有没有办法让它更快?

venues = pd.DataFrame(columns = ['id', 'raw', 'type'])
authors = pd.DataFrame(columns = ['id','name'])
main = pd.DataFrame(columns = ['author_id','venue_id','number_of_times'])
with open(r'C:\Users\dintz\Documents\test.json',encoding='UTF-8') as infile:
papers = ijson.items(infile, 'item')
for paper in papers:
if 'id' not in paper["venue"]:
if 'type' not in paper["venue"]:
venues = venues.append({'raw': paper["venue"]["raw"]},ignore_index=True)
else:
venues = venues.append({'raw': paper["venue"]["raw"], 'type': paper["venue"]["type"]},ignore_index=True)
else:
venues = venues.append({'id': paper["venue"]["id"] , 'raw': paper["venue"]["raw"], 'type': paper["venue"]["type"]},ignore_index=True)
paper_authors = paper["authors"]
paper_authors_json = json.dumps(paper_authors)
obj = ijson.items(paper_authors_json,'item')
for author in obj:
authors = authors.append({'id': author["id"] , 'name': author["name"]},ignore_index=True)
main = main.append({'author_id': author["id"] , 'venue_raw': venues.iloc[-1]['raw'],'number_of_times': 1},ignore_index=True)

authors = authors.drop_duplicates(subset=None, keep='first', inplace=False)
venues = venues.drop_duplicates(subset=None, keep='first', inplace=False)
main = main.groupby(by=['author_id','venue_raw'], axis=0, as_index = False).sum()

最佳答案

Apache Spark 允许并行读取多个 block 中的 json 文件以使其更快 - https://spark.apache.org/docs/latest/sql-data-sources-json.html

对于常规的多行 JSON 文件,将 multiLine 参数设置为 True。

如果您不熟悉 Spark,您可以在名为 Koalas 的 Spark 之上使用 Pandas 兼容层 -

https://koalas.readthedocs.io/en/latest/

考拉 read_json 调用 - https://koalas.readthedocs.io/en/latest/reference/api/databricks.koalas.read_json.html

关于python - 使用 Python 快速解析一个巨大的 12 GB JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64419754/

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