HDF5 a PySpark? Peklíčko…

Pracuju teď na jednom pracovním úkolu, který nebudu rozebírat. Nicméně součástí zadání je zpracování dat, která byla předána v HDF5 formátu (v tomto formátu bylo předáno mnoho souborů). Což je supr dupr formát pro předání dat, nicméně Spark, respektive PySpark si s ním neumí pořádně poradit.

Strávil jsem skoro 20 hodin tím, že jsem načítal dokumentaci, abych zjistil, jak tenhle formát dostat do sparkovskýho RDD, nebo do Hadoopu, abych to Sparkem mohl číst. Nefungovalo nic. Trhal jsem si vlasy. Kamarádům v hospodě brečel na rameni, že nefunguje nic, co jsem vyzkoušel.

Nakonec jsem ustoupil z přímočarého řešení – načíst HDF5 do Sparku a tam s tím pracovat. A přešel jsem do konverze mnoho HDF5->mnoho CSV->jedno HDF5->Spark RDD. Nefungovalo ani to. Nakonec jsem se z toho vylhal metodou mnoho HDF5->mnoho CSV->jedno CSV. Odsud už vše jde jak má.


#cesta k souborům
cesta="C:/hdf5/"

#soubory
hdf5f=[...]

x=os.listdir(cesta)
soubory=[]
h5=list()

for files in x:
soubory.append(files)

for i in range(len(soubory)):
a=cesta+soubory[i]
h5.append(a)

for i in range(len(hdf5f)):
database=pd.read_hdf(hdf5f[i],"data")
df=pd.DataFrame(database,columns=[...])
df.to_csv("C:/datatools/csv/hdf" + str(i) + ".csv", sep=',')

csv_dir = "C:/datatools/csv/"
hdf5_dir = "C:/datatools/hdf5/"
hdfile = os.path.join(hdf5_dir, 'merged.hdf5')
store = pd.HDFStore(hdfile)
csv_files=[f for f in os.listdir(csv_dir) if f.endswith('.csv')]
csvs=[]

for file in csv_files:
csvs.append(csv_dir+file)

for i in range(len(csvs)):
df = pd.read_csv(csvs[i],index_col=None)
store.append('data', df)

store.close()

csvfin = "C:/datatools/csv/fin/final.csv"
datas = sqlContext.read.format(csvfin)

Problém: s HDF5 se následně nedá v PySparku pracovat, protože dataset je příliš velký.
Jednotlivé CSV jsem sloučil pomocí

type *.csv > final.csv

Takže super. Blbejch 20h tuposti zaplaceno 8h práce. No, vlastně proč ne.

Advertisements

Zanechat Odpověď

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

WordPress.com Logo

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit / Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Odhlásit / Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit / Změnit )

Google+ photo

Komentujete pomocí vašeho Google+ účtu. Odhlásit / Změnit )

Připojování k %s