【问题标题】:Is it possible to compress Parquet file which contain Json data in hive external table?是否可以在 hive 外部表中压缩包含 Json 数据的 Parquet 文件?
【发布时间】:2016-10-23 03:28:42
【问题描述】:

我想知道如何压缩包含 Hive 外部表中 Json 数据的 Parquet 文件。如何做呢?

我已经创建了这样的外部表:

create table parquet_table_name3(id BIGINT,created_at STRING,source STRING,favorited BOOLEAN) ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' LOCATION '/user/cloudera/parquet2';

我已经设置了压缩属性

set parquet.compression=GZIP;

并通过执行压缩我的输入 Parquet 文件

GZIP <file name> ( i.e 000000_0.Parquet) 

之后我将压缩的 GZIP 文件加载到 hdfs 位置/user/cloudera/parquet2

接下来我尝试运行下面的查询

select * from parquet_table_name3;

我得到以下结果

NULL    NULL    NULL    NULL
NULL    NULL    NULL    NULL

你能告诉我为什么我得到空值而不是结果,如何在 hive 外部表中进行 parquet 文件压缩(如果它包含 json 数据)?有人可以帮我在 hive 外部表中压缩吗?

【问题讨论】:

    标签: hadoop hive cloudera hiveql parquet


    【解决方案1】:

    呃!您不能“从外部”压缩现有的 Parquet 文件。它是一种柱状格式,内部结构极其复杂,就像 ORC 一样;文件“骨架”需要快速随机访问(即不压缩),并且每个数据块必须单独压缩,因为它们是单独访问的。

    当您创建一个新的 Parquet 文件时,您请求 SerDe 库根据 parquet.compression Hive 属性压缩文件内部的数据。
    在读取时,SerDe 会检查每个数据文件的压缩编解码器并相应地解压缩。

    快速的 Google 搜索会返回几个必读,例如thisthat

    【讨论】:

    • 这也适用于 Apache Arrow - 您的语言库(例如 Ruby)可能会提供压缩选项,但如果它正在压缩 .parquet 文件而不是告诉 Parquet 内部压缩,则它不起作用它正确。 Parquet GZip 压缩与 gzip foo.parquet 不同!这没有很好的记录,我花了一段时间才理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    相关资源
    最近更新 更多