如何 Shuffle 大JSON文件?

vbopmzt1  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(186)

我有一个JSON文件,其中包含100万个条目(大小:405 Mb)。它看起来像这样:

[
  {
     "orderkey": 1,
     "name": "John",
     "age": 23,
     "email": "john@example.com"
  },
  {
     "orderkey": 2,
     "name": "Mark",
     "age": 33,
     "email": "mark@example.com"
  },
...
]

数据是按"orderkey"排序的,我需要对数据进行 Shuffle 。
我尝试应用下面的Python代码。它适用于较小的JSON文件,但不适用于我的405 MB文件。

import json
import random

with open("sorted.json") as f:
     data = json.load(f)

random.shuffle(data)

with open("sorted.json") as f:
     json.dump(data, f, indent=2)

怎么做呢?

更新日期:

最初我得到了以下错误:

~/Desktop/shuffleData$ python3 toShuffle.py 
Traceback (most recent call last):
  File "/home/andrei/Desktop/shuffleData/toShuffle.py", line 5, in <module>
    data = json.load(f)
  File "/usr/lib/python3.10/json/__init__.py", line 293, in load
    return loads(fp.read(),
  File "/usr/lib/python3.10/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.10/json/decoder.py", line 340, in decode
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 403646259 (char 403646258)

发现问题是JSON文件的结尾有"}"。我有无效的[{...},{...}]}
删除"}"修复了问题。

nzrxty8p

nzrxty8p1#

发现问题是JSON文件的结尾有“}”。我有[{...},{...}]},这不是有效的格式。
最后删除“}”修复了问题。
提供的python代码可以工作。

b4lqfgs4

b4lqfgs42#

这应该是理想的,除非你有内存限制。

import random
random.shuffle(data)

如果你正在寻找另一种方法,并希望对大型集合进行基准测试,你可以使用sci-kit learn libraries shuffle函数。

from sklearn.utils import shuffle

shuffled_data = shuffle(data)
print(shuffled_data)

注:必须安装名为Scikit learn的附加软件包。(pip install -U scikit-learn

相关问题