Предположим, у меня есть CSV-файл, подобный этому:
"Col1Name", "Col2Name"
"a", "b"
"c", "d"
Предположим, я ввожу следующую команду CREATE EXTERNAL TABLE в Афине:
CREATE EXTERNAL TABLE test.sometable (
col1name string,
col2name string
)
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
with serdeproperties (
'separatorChar' = ',',
'quoteChar' = '\"',
'escapeChar' = '\\'
)
stored as textfile
location 's3://somebucket/some/path/'
tblproperties("skip.header.line.count"="1")
Затем я выдаю следующий SELECT:
SELECT * FROM test.sometable
Я ожидаю получить следующее:
+----------+----------+
| col1name| col2name|
+----------+----------+
| a| b|
| c| d|
+----------+----------+
... и, конечно же, именно это я и получаю.
В кластере EMR, использующем каталог метаданных AWS Glue в Spark, я выдаю следующее в pyspark REPL:
a = spark.sql("select * from test.sometable")
a.show()
Я ожидаю получить тот же вывод, но вместо этого получаю:
+----------+----------+
| col1name| col2name|
+----------+----------+
| col1name| col2name|
| a| b|
| c| d|
+----------+----------+
Очевидно, что Афина соблюдает tblproperty «skip.header.line.count», но PySpark, похоже, игнорирует ее.
Как заставить PySpark игнорировать эту строку заголовка, как это делает Афина?