你好理查德,
這實際上並行化閱讀頁腳嗎?或者隻是幫助Spark-generated鋪文件?關於序列化的頁腳閱讀,我沒有注意到緩存文件在ssd上獲得巨大收益。
歡呼,
肯
你好,
有一些SQL優化我建議你考慮。
1)利用分區表可以幫助你如果你經常隻有從幾天一次訪問數據。有筆記本磚指南中叫做“分區表”,更多的數據。
2)如果你的文件非常小,這是事實,你可以獲得更好的性能將這些文件合並到一個更小的數字。你可以很容易在火花命令如下:
sqlContext。parquetFile (SOME_INPUT_FILEPATTERN) .coalesce (SOME_SMALLER_NUMBER_OF_DESIRED_PARTITIONS) .write.parquet (SOME_OUTPUT_DIRECTORY)
擁有一個大的#小文件或文件夾可以顯著惡化加載數據的性能。最好的方法是保持文件夾/文件合並,這樣每個文件大約是64 mb的大小。有不同的方法來實現這一目標:作家過程可以在內存中緩衝他們和寫後才到達一個大小或作為第二階段你可以讀取臨時目錄並鞏固他們在一起,寫出來到另一個位置。如果你想做後者,你可以閱讀你的每一個輸入目錄作為dataframe和工會和重新分配到#你想要的文件和轉儲。在Scala代碼片段:
val dfSeq = MutableList [DataFrame] ()sourceDirsToConsolidate。地圖(dir = > {val df = sqlContext.parquetFile (dir) dfSeq + = df})
val masterDf = dfSeq。減少((df2 df1) = > df1.unionAll (df2)) masterDf.coalesce (numOutputFiles) .write.mode (saveMode) .parquet (destDir)
dataframe的api是在python中相同。所以你可以很容易轉換為python。