查詢不跳過外部表上的標題行

當從Spark SQL中查詢時,外部Hive表不會跳過頭行。

寫的manisha.jena

最後發布日期:2022年5月24日

問題

您正在嚐試查詢一個外部Hive表,但它一直未能跳過標題行,即使TBLPROPERTIES (' skip.header.line.count ' = ' 1 ')在HiveContext中設置。

您可以通過使用這個示例代碼創建一個表來重現這個問題。

%sql CREATE EXTERNAL TABLE school_test_score (' school ' varchar(254), ' student_id ' varchar(254), ' gender ' varchar(254), ' pretest ' varchar(254), ' posttest ' varchar(254)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS INPUTFORMAT 'TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io。HiveIgnoreKeyTextOutputFormat' LOCATION 'dbfs:/FileStore/table_header/' TBLPROPERTIES ('skip.header.line。數' = ' 1 ')

如果嚐試從表中選擇前五行,則第一行是標題行。

sql SELECT * FROM school_test_score LIMIT

表輸出,頭行作為第一個數據行。

導致

如果直接從Hive查詢,則會正確跳過標題行。Apache Spark不識別skip.header.line.count屬性在HiveContext,所以它不會跳過標題行。

Spark的行為與設計一致。

解決方案

您需要使用Spark選項來創建帶有標題選項的表。

%sql CREATE TABLE student_test_score (school String, student_id String, gender String, pretest String, posttest String) USING CSV OPTIONS(路徑"dbfs:/FileStore/table_header/", delimiter ",", header "true");

從表中選擇前五行,標題行不包括在內。

sql SELECT * FROM school_test_score LIMIT

跳過標題行的表輸出。