【问题标题】:Table in Pyspark shows headers from CSV FilePyspark 中的表格显示来自 CSV 文件的标题
【发布时间】:2020-10-28 06:16:21
【问题描述】:

我有一个 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 中做类似的事情。

有人可以建议我一个方法....谢谢????提前!!

【问题讨论】:

    标签: apache-spark hadoop pyspark hive apache-spark-sql


    【解决方案1】:

    这是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)
    

    另一种方法是使用 .option("header","true")HDFS 读取文件。

    【讨论】:

    • 感谢舒的回复。好吧,我绝对可以在查询中添加一个额外的过滤器,但是,我想避免在查询中使用额外的过滤器 [where tmp_id 'id' and tmp_name 'name']。
    • @Bjay,我能想到的另一种方法是从 hive 表中读取然后convert to rdd 过滤掉行然后convert back to dataframe。但是在这里我们做了很多转换(不推荐)。 stackoverflow.com/questions/27854919/…
    • 是的,这种方法的对话太多了。在我的情况下,如果有大量实时数据(~18TB),我想它会消耗相当多的时间和计算。上面提到的过滤器可能更合适。
    猜你喜欢
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    相关资源
    最近更新 更多