我有一个 csv 文件,其内容如下,第一行有一个标题。
id,name
1234,Rodney
8984,catherine
现在我能够在 hive 中创建一个表来跳过标题并适本地读取数据。Hive 中的表
CREATE EXTERNAL TABLE table_id(
`tmp_id` string,
`tmp_name` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'field.delim'=',',
'serialization.format'=',')
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://some-testing/test/data/'
tblproperties ("skip.header.line.count"="1");
结果 Hive select * from table_id;
OK
1234 Rodney
8984 catherine
Time taken: 1.219 seconds, Fetched: 2 row(s)
但是,当我在 pyspark 中使用同一张表(运行相同的查询)时,我什至会在 pyspark 结果中看到来自文件的标题,如下所示。>>> spark.sql("select * from table_id").show(10,False)
+------+---------+
|tmp_id|tmp_name |
+------+---------+
|id |name |
|1234 |Rodney |
|8984 |catherine|
+------+---------+
现在,我怎么能忽略这些出现在 pyspark 的结果中。我知道我们可以读取 csv 文件并添加 .option("header",True) 来实现这一点,但是,我想知道在查询表时是否有办法在 pyspark 中做类似的事情。
有人可以建议我一个方法....谢谢🙏提前!
最佳答案
这是 Spark-11374
中的已知问题并关闭为won't fix
.
在查询中,您可以有 where 子句 选择除 之外的所有记录'id'
和 'name'
.
spark.sql("select * from table_id where tmp_id <> 'id' and tmp_name <> 'name'").show(10,False)
#or
spark.sql("select * from table_id where tmp_id != 'id' and tmp_name != 'name'").show(10,False)
另一种方法是使用从 读取文件HDFS 与 .option("header","true")
.
关于apache-spark - Pyspark 中的表格显示来自 CSV 文件的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62784583/