代码之家  ›  专栏  ›  技术社区  ›  Turo

用拼花地板存储多个不同宽度的数据帧?

  •  3
  • Turo  · 技术社区  · 8 年前

    拼花地板是否支持在单个文件中存储不同宽度(列数)的各种数据帧?例如,在HDF5中,可以存储多个这样的数据帧并按键访问它们。到目前为止,从我的 reading 这个拼花不支持它,所以另一种方法是将多个拼花文件存储到文件系统中。我有相当多的(比如10000个)相对较小的帧需要处理大约1-5MB,所以我不确定这是否会成为一个问题?

    import pandas as pd
    import pyarrow as pa
    import pyarrow.parquet as pq
    
    dfs = []
    df1 = pd.DataFrame(data={"A": [1, 2, 3], "B": [4, 5, 6]},
                       columns=["A", "B"])
    df2 = pd.DataFrame(data={"X": [1, 2], "Y": [3, 4], "Z": [5, 6]},
                       columns=["X", "Y", "Z"])
    dfs.append(df1)
    dfs.append(df2)
    
    for i in range(2):
        table1 = pa.Table.from_pandas(dfs[i])
        pq.write_table(table1, "my_parq_" + str(i) + ".parquet")
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Uwe L. Korn    8 年前

    不,这是不可能的,因为拼花图文件只有一个模式。它们通常不会显示为单个文件,而是显示为目录中的多个文件,所有文件都是相同的模式。这使工具能够像读取一个文件一样读取这些文件,要么完全读取到本地RAM中,分布在多个节点上,要么对它们评估一个(SQL)查询。

    拼花地板还可以有效地存储这些数据帧,即使对于这个小尺寸,因此它应该是适合您的用例的序列化格式。与HDF5不同,拼花地板只是表格式数据的序列化。正如您的问题中所提到的,HDF5还支持文件系统,如key vale access。由于您有大量的文件,这对于底层的文件系统可能是有问题的,所以您应该寻找这个层的替换。可能的方法是首先将数据帧序列化为内存中的拼花,然后将其存储在键值容器中,这可以是一个简单的Zip存档,也可以是一个真正的键值存储,如LevelDB。