假设我有一个这样的CSV文件:
"Col1Name", "Col2Name"
"a", "b"
"c", "d"
假设我在Athena中发出以下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|
+----------+----------+
......果然,这正是我得到的。
在使用Spark中的AWS Glue元数据目录的EMR集群上,我在pyspark REPL中发出以下内容:
a = spark.sql("select * from test.sometable")
a.show()
我希望收到相同的输出,但相反,我得到了这个:
+----------+----------+
| col1name| col2name|
+----------+----------+
| col1name| col2name|
| a| b|
| c| d|
+----------+----------+
显然,Athena正在尊重“skip.header.line.count”tblproperty,但PySpark似乎忽略了它。
如何让PySpark忽略这个标题行,就像Athena那样?
答案 0 :(得分:0)
这两种方法中的任何一种都可以帮到你:
(1)在参数中设置要跳过的标题行计数:
'skip.header.line.count'='1'
(2)或者,在select查询中使用where子句来过滤该行。说:
SELECT * FROM test.sometable where col1name <> 'col1name'