Ich habe eine HDF5-Datei, die ich in eine Liste von Dask DataFrames laden möchte. Ich habe dies eingerichtet mit einer Schleife nach einer abgekürzten Version des Dask pipeline approach. Hier ist der Code:HDF-Datei in Liste von Python Dask DataFrames laden
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)
ich diese Fehlermeldung:
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))
Die Meldung erwähnt einen doppelten Schlüssel. Ich habe über die ersten 9 Dateien iteriert, um den Code zu testen, und in der Schleife verwende ich jede Iteration, um einen anderen Schlüssel zusammenzustellen, den ich mit dd.read_hdf
verwende. Bei allen Iterationen behalte ich den Dateinamen gleich - nur der Schlüssel wird geändert.
Ich muss dd.concat(list,axis=0,...)
verwenden, um den Inhalt der Datei vertikal zu verketten. Mein Ansatz war, sie zuerst in eine Liste zu laden und dann zu verketten.
Ich habe PyTables und h5Py installiert und habe die Dies-Version 0.14.3+2
.
Mit Pandas 0.20.1
, scheine ich diese Arbeit zu bekommen:
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()
Gibt es eine Weise, die ich diese HDF5 Datei in eine Liste von Dask Datenrahmen laden? Oder gibt es einen anderen Ansatz, sie vertikal zu verketten?
Ich hatte das verpasst. Vielen Dank! –
Ist es möglich, gemischte "verzögerte" und "nicht verzögerte" Funktionen in derselben Pipeline zu verwenden? –
Siehe [diese Dokumente] (http://dask.pydata.org/en/latest/delayed-collections.html) für die Konvertierung zwischen verzögerten Werten und dask.dataframes. Es gibt keinen Grund, Lazy-Funktionen in Lazy-Funktionen zu verschachteln. – MRocklin