我有15k個小文件。處理之後,每個文件生成三個數據幀對象:v,vT和e。我想將所有15k文件的所有這三個數據幀存儲到一個數據框對象中(我們稱之爲組合)並寫入磁盤,以便下一次只讀取一次而不是15k次。此外,我還可以將此組合轉換爲RDD,並將地圖功能一次應用於15k條記錄。這將充分利用CPU。我可以創建一個以數據框爲元素的數據框嗎? (Pyspark使用sqlContext)
但是目前我的實現是將v,vT和e寫入一個文件夾(每個文件夾每個文件夾,總共15k個文件夾)。在每個文件夾中,v,vT和e分別有三個文件夾。現在我必須讀取所有文件的每個15k次(技術上我需要讀取15k * 3 = 45k次)。當我在這些文件上應用某些算法時,我只需使用for循環來逐一應用算法。不是很聰明我知道
所以我想出了一個想法,即將15k文件的v,vT和e存儲到名爲combo的列表中,然後創建一個單一數據框combo_df。通過將combo_df轉換爲RDD,我可以使用map函數在所有15k上一次應用用戶定義的函數。
的代碼如下,對於每個文件:
v = sqlContext.createDataFrame(uri,
['id', 'URI', 'flag'])
vT = sqlContext.createDataFrame(vertex,
['id', 'URI_ID_FK', 'Vertex_Type_URI_ID_FK'])
e = sqlContext.createDataFrame(edge,
['src', 'dst', 'Relation_Type_URI_ID_FK'])
URI,頂點和邊緣是三個列表對象從每個文件提取。
商店所有的V,VT和15K文件電子爲使用組合
combo_df = sqlContext.createDataFrame(combo, ['v', 'vT', 'e'])
此時一個列表組合
combo = [[v1, vT2, e3],...,[vN, vTN, eN]] (pseudo-code)
我想創建一個數據幀(combo_df)我得到一個錯誤:
AssertionError: dataType should be DataType
我不知道如何解決這個問題。
我有15K的文件。在這種情況下,我將不得不創建45k文件。這個文件非常小,像100kb到300kb。所以我需要找到一種方法將所有它們合併成一個數據框,意思是給我15k文件,我給你一個數據幀。 –