從文件讀取數據時使用火花的StreamReader,分區列(在你的情況下,date_和hr_)不會自動推斷作為輸出列。相反,他們使用動態分區數據基於他們的價值觀。
分區列包含在輸出中,您可以指定他們明確使用StreamReader的選項()方法。這裏有一個例子如何閱讀你的數據,包括分區列輸出:
從pyspark.sql。功能導入input_file_name df = spark.read.format (csv) \ .option(“頭”,“真正的”)\ .option (“inferSchema”,“真正的”)\ .option (“dateFormat”、“yyyy-MM-dd”) \ .option (“timestampFormat”、“yyyy-MM-dd HH: mm: ss”) \ .option (“basePath”、“/交易/”)\ .option (“pathGlobFilter”、“* . csv”) \ .option (“recursiveFileLookup”,“真正的”)\ .option (“partitionColumn”、“date_, hr_”) \ .option (“numPartitions”、“100”) \ .load(“/交易/”)df = df。withColumn (“date_ df (“date_”) .cast(“日期”))\ .withColumn (“hr_ df (“hr_”) .cast(整數))\ .withColumn(“文件名”,input_file_name ())
在這個示例中,我們指定basePath /事務,這是分區的根目錄文件。我們也隻使用pathGlobFilter選項過濾CSV文件,和recursiveFileLookup尋找文件在所有子目錄。partitionColumn選項設置為“date_ hr_”表明這些列的數據分區。我們也將numPartitions設置為“100”控製的分區結果DataFrame。最後,我們使用withColumn()方法將date_列日期類型和hr_列整數類型。我們也添加一個新的列稱為文件名使用input_file_name()函數,它返回文件,每一行的名字的來源。這些選項設置,生成的df DataFrame將包括date_和hr_列在輸出中,連同其他CSV文件中的列。