PySpark關於HDFS檔案(目錄)輸入、資料格式的探討 ####3
背景 平臺HDFS資料儲存規則是按照“資料集/天目錄/小時目錄/若干檔案”進行的,其中資料集是依據產品線或業務劃分的。 使用者分析資料時,可能需要處理以下五個場景: (一)分析指定資料集、指定日期、指定小時、指定檔案的資料;(二)分析指定資料集、指定日期、指定小時的資料;(三)分析指定資料集、指定日期的資料(24個小時目錄的資料);(四)分析多個數據集、多個日期或多個小時的資料;(五)多種儲存格式(textfile、sequencefile、rcfile等)。 目前我們平臺提供給使用者的分析工具為PySpark(Spark、Spark SQL、Python),本文討論的就是使用PySpark如果應對上述場景。 示例
!!!!!!關鍵點outputformatclass也可以用inputformatclass的方式實現~!!!!!!!!
其實Converter的邏輯非常簡單,就是將BytesRefArrayWritable中的資料提取、轉換為基本資料型別Text。 將上述程式碼編譯打包為converter.jar。 PySpark程式碼如下: 重點注意幾個引數值: mapreduce.input.fileinputformat.inputdir:hdfs://dip.cdh5.dev:8020/user/hdfs/yurun/rcfile/datainputFormatClass:org.apache.hadoop.hive.ql.io.RCFileInputFormatkeyClass:org.apache.hadoop.io.LongWritablevalueClass:org.apache.hadoop.io.TextvalueConverter:com.sina.dip.spark.converter.BytesRefArrayWritableToStringConverter 執行命令: 結果輸出: 三行資料,每行資料均為字串輸出,且以空格分隔,可見資料得到正常轉換。 通過上述方式,我們可以通過SparkContext hadoopRDD支援多種資料格式資料的分析。 總結 本文通過五種常見應用場景的討論,可以得出使用PySpark可以支援靈活的資料輸入路徑,還可以根據需求擴充套件支援多種資料格式。