如何将大的json(多个对象)加载到块中的panda Dataframe 中以避免高内存使用?

yi0zb3m4  于 2022-11-19  发布在  其他
关注(0)|答案(2)|浏览(118)

我有一个非常大的json文件,它是以多个对象的形式存在的,对于小数据集,这是可行的

data=pd.read_json(file,lines=True)

但是在同样的但是更大的数据集上,它会在8GB的RAM计算机上崩溃,所以我试着用下面的代码先把它转换成列表

data[]
with open(file) as file:
    for i in file:
        d = json.loads(i)
        data.append(d)'

然后将列表转换为 Dataframe ,

df = pd.DataFrame(data)

这确实转换成一个列表罚款,即使与大数据集文件,但它崩溃时,我试图转换成一个 Dataframe ,由于它使用了太多的内存,我认为
我试过

data[]
with open(file) as file:
    for i in file:
        d = json.loads(i)
        df=pd.DataFrame([d])'

我以为它会一个接一个地追加,但我认为它仍然会立即在内存中创建一个大副本,而不是,所以它仍然会崩溃。
我如何将大的json文件转换成 Dataframe 的块,使它限制内存使用?

ivqmmu1c

ivqmmu1c1#

有几种可能的解决方案,取决于您的具体情况。鉴于我们没有数据示例或数据结构的信息,我可以提供以下内容:

  • 如果json文件中的数据是数值型的,考虑将其分成块,阅读每个块并转换为最小的类型(float 32/int),因为panda将使用内存密集型的float 64
  • 对于大于内存数据集,可以使用Dask,就像您所看到的那样。
aoyhnmkz

aoyhnmkz2#

为了避免中间数据结构,可以使用生成器。

def load_jsonl(filename):
    with open(filename) as fd:
        for line in fd:
            yield json.loads(line)

df = pd.DataFrame(load_jsonl(filename))

相关问题