【问题标题】:How to upgrade the Hive version in Azure Databricks如何在 Azure Databricks 中升级 Hive 版本
【发布时间】:2020-10-09 00:18:16
【问题描述】:

org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.UnsupportedOperationException: Parquet 不支持时间戳。见 HIVE-6384;

在 Azure Databricks 中执行以下代码时出现上述错误。

spark_session.sql("""
    CREATE EXTERNAL TABLE IF NOT EXISTS dev_db.processing_table
    (
      campaign STRING,
      status STRING,
      file_name STRING,
      arrival_time TIMESTAMP
    )
    PARTITIONED BY ( 
      Date DATE)
    ROW FORMAT SERDE
      'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
    STORED AS INPUTFORMAT
      'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
    OUTPUTFORMAT
      'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
    LOCATION "/mnt/data_analysis/pre-processed/"
""")

我在 Azure 数据块中使用 hive,当我运行命令 spark_session.conf.get("spark.sql.hive.metastore.version") 时,它显示为 Hive 0.13 版本。

Hive 0.13 不支持 parquet 文件的 Timestamp 数据类型。

在我当前的数据集中,我有多个 Timestamp 数据类型的列。 根据 Hive-6384 Jira,从 Hive-1.2 开始,您可以在 parquet 表中使用时间戳、日期类型。

如何升级 Hive/Hive Metastore 版本?

【问题讨论】:

    标签: azure apache-spark hadoop hive azure-databricks


    【解决方案1】:

    您可以在 Databricks 集群中升级 Databricks Runtime 的版本。 我目前使用的是 6.5 版,并且能够创建带有 Timestamp 列的 Hive parquet 表。

    【讨论】:

    • 我也在使用 databricks 6.5 版,但是我得到了 hive 0.13,因此我们不能将时间戳与镶木地板一起使用。我可以知道您如何使用带镶木地板的时间戳列以及集群中的配置单元版本是什么?
    • spark.conf.get("spark.sql.hive.metastore.version") 返回 1.2.1。我在下面使用的示例 DDL:创建外部表 test.balance (ProductCode string, Balance double) PARTITIONED BY (processing_date string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe ' WITH SERDEPROPERTIES ('serialization.format' = '1') LOCATION 'dbfs:/mnt/';
    猜你喜欢
    • 2022-08-03
    • 2018-09-20
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2018-01-06
    • 2019-09-19
    • 2020-07-28
    相关资源
    最近更新 更多