【问题标题】:Creating Hive table on top of parquet files is failing - where am I going wrong?在镶木地板文件上创建 Hive 表失败 - 我哪里出错了?
【发布时间】:2018-04-20 04:54:23
【问题描述】:

我正在将数据框保存到镶木地板文件中。生成的架构如下所示:

org.apache.spark.sql.parquet.row.metadata{  
"type":"struct",
"fields":[  
  {  
     "name":"DCN",
     "type":"string",
     "nullable":true,
     "metadata":{}
  },
  {  
     "name":"EDW_id",
     "type":"string",
     "nullable":true,
     "metadata":{}
  },
  {  
     "name":"recievedTimestamp",
     "type":"string",
     "nullable":true,
     "metadata":{}
  },
  {  
     "name":"recievedDate",
     "type":"date",
     "nullable":true,
     "metadata":{}
  },
  {  
     "name":"rule",
     "type":"string",
     "nullable":true,
     "metadata":{}
  }
]}

数据帧正在火花程序中生成;当我通过 spark-submit 运行它并显示数据框时,我可以看到有数百条记录。我将 df 保存到镶木地板,如下所示:

df.write.format("parquet").mode(SaveMode.Overwrite).save('/home/my/location')

并像这样在 hive 中创建一个外部表:

CREATE EXTERNAL TABLE schemaname.tablename (
  DCN STRING,
  EDW_ID STRING,
  RECIEVEDTIMESTAMP STRING,
  RECIEVEDDATE STRING,
  RULE STRING) 
STORED AS PARQUET
LOCATION '/home/my/location';

表已成功创建,但未填充任何数据 - 当我查询它时,返回 0 条记录。谁能发现我做错了什么?这是使用 Hive 1.1 和 Spark 1.6。

【问题讨论】:

    标签: apache-spark hive apache-spark-sql parquet


    【解决方案1】:

    Hive 处理 parquet 文件所需的 jar 文件。

    1.首先下载parquet-hive-bundle-1.5.0.jar

    2.将jar路径包含到hive-site.xml中。

    <property>
       <name>hive.jar.directory</name>
       <value>/home/hduser/hive/lib/parquet-hive-bundle-1.5.0.jar</value>
    </property>
    

    【讨论】:

      【解决方案2】:

      hive 元数据存储不区分大小写,并以小写形式存储所有列名称,其中 parquet 存储原样。尝试在相同的情况下重新创建配置单元表。

      【讨论】:

        猜你喜欢
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        • 2019-11-27
        • 2020-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-14
        相关资源
        最近更新 更多