Python 2.7 将HDF文件加载到Python Dask数据帧列表中

Python 2.7 将HDF文件加载到Python Dask数据帧列表中,python-2.7,dataframe,hdf5,h5py,dask,Python 2.7,Dataframe,Hdf5,H5py,Dask,我有一个HDF5文件,我想加载到Dask数据帧列表中。我已经在Dask的一个缩写版本后面使用了一个循环来设置这个。代码如下: import pandas as pd from dask import compute, delayed import dask.dataframe as dd import os, h5py @delayed def load(d,k): ddf = dd.read_hdf(os.path.join(d,'Cleaned.h5'), key=k) r

我有一个HDF5文件,我想加载到Dask数据帧列表中。我已经在Dask的一个缩写版本后面使用了一个循环来设置这个。代码如下:

import pandas as pd
from dask import compute, delayed
import dask.dataframe as dd
import os, h5py

@delayed
def load(d,k):
    ddf = dd.read_hdf(os.path.join(d,'Cleaned.h5'), key=k)
    return ddf

if __name__ == '__main__':      
    d = 'C:\Users\User\FileD'
    loaded = [load(d,'/DF'+str(i)) for i in range(1,10)]

    ddf_list = compute(*loaded)
    print(ddf_list[0].head(),ddf_list[0].compute().shape)
我收到以下错误消息:

C:\Python27\lib\site-packages\tables\group.py:1187: UserWarning: problems loading leaf ``/DF1/table``::

  HDF5 error back trace

  File "..\..\hdf5-1.8.18\src\H5Dio.c", line 173, in H5Dread
    can't read data
  File "..\..\hdf5-1.8.18\src\H5Dio.c", line 543, in H5D__read
    can't initialize I/O info
  File "..\..\hdf5-1.8.18\src\H5Dchunk.c", line 841, in H5D__chunk_io_init
    unable to create file chunk selections
  File "..\..\hdf5-1.8.18\src\H5Dchunk.c", line 1330, in H5D__create_chunk_file_map_hyper
    can't insert chunk into skip list
  File "..\..\hdf5-1.8.18\src\H5SL.c", line 1066, in H5SL_insert
    can't create new skip list node
  File "..\..\hdf5-1.8.18\src\H5SL.c", line 735, in H5SL_insert_common
    can't insert duplicate key

End of HDF5 error back trace

Problems reading the array data.

The leaf will become an ``UnImplemented`` node.
  % (self._g_join(childname), exc))
消息中提到了一个重复的密钥。我迭代了前9个文件来测试代码,在循环中,我使用每个迭代来组装一个不同的键,我使用
dd.read\u hdf
。在所有迭代过程中,我都保持文件名不变——只更改了密钥

我需要使用
dd.concat(list,axis=0,…)
来垂直连接文件的内容。我的方法是先将它们加载到一个列表中,然后将它们连接起来

我已经安装并拥有Dask版本
0.14.3+2

使用Pandas
0.20.1
,我似乎可以做到这一点:

for i in range(1,10):
    hdf = pd.HDFStore(os.path.join(d,'Cleaned.h5'),mode='r')
    df = hdf.get('/DF{}' .format(i))
    print df.shape
    hdf.close()

有没有办法将这个HDF5文件加载到Dask数据帧列表中?或者有其他方法将它们垂直连接在一起吗?

Dask.dataframe已经是惰性的,因此没有必要使用Dask.delayed使其更惰性。您可以反复调用
dd.read\u hdf

ddfs = [dd.read_hdf(os.path.join(d,'Cleaned.h5'), key=k)
        for k in keys]

ddf = dd.concat(ddfs)

我错过了。谢谢是否可以在同一管道中使用混合的
延迟
非延迟
函数?有关如何在延迟值和dask.dataframes之间转换的信息,请参阅。没有理由在惰性函数中嵌套惰性函数。