【问题标题】:Convert file of JSON objects to Parquet file将 JSON 对象文件转换为 Parquet 文件
【发布时间】:2014-02-11 00:54:11
【问题描述】:

动机:我想将数据加载到 Apache Drill。我知道 Drill 可以处理 JSON 输入,但我想看看它在 Parquet 数据上的表现。

有没有什么方法可以做到这一点,而无需先将数据加载到 Hive 等中,然后使用其中一个 Parquet 连接器生成输出文件?

【问题讨论】:

标签: json apache parquet apache-drill


【解决方案1】:

Kite 支持通过其命令行实用程序kite-dataset 将 JSON 导入 Avro 和 Parquet 格式。

首先,您将推断 JSON 的架构:

kite-dataset json-schema sample-file.json -o schema.avsc

然后您可以使用该文件创建 Parquet Hive 表:

kite-dataset create mytable --schema schema.avsc --format parquet

最后,您可以将 JSON 加载到数据集中。

kite-dataset json-import sample-file.json mytable

您还可以导入整个直接存储在 HDFS 中。在这种情况下,Kite 将使用 MR 作业进行导入。

【讨论】:

  • 仅供参考 - 我试过了,它需要安装 hadoop。我也在尝试将文件转换为与钻一起使用,但我没有 hadoop。
  • 正确。上面的链接用于在 Hadoop 集群上安装。如果需要,maven Central 中还有一个包含依赖项的 tarball 分发包。那个问题是你必须决定这些依赖关系应该是什么,这因 Hadoop 分布而异。这就是为什么我建议使用从您运行的集群中获取 Hadoop 依赖项的说明。
【解决方案2】:

您实际上可以使用 Drill 本身从任何查询的输出中创建 parquet 文件。

create table student_parquet as select * from `student.json`;

上面的行应该足够好了。 Drill 根据字段中的数据解释类型。您可以替换自己的查询并创建 parquet 文件。

【讨论】:

    【解决方案3】:

    要完成@rahul 的答案,您可以使用 Drill 来执行此操作 - 但我需要在查询中添加更多内容才能使用 Drill 开箱即用。

    create table dfs.tmp.`filename.parquet` as select * from dfs.`/tmp/filename.json` t
    

    我需要为它提供存储插件 (dfs),并且“root”配置可以从整个磁盘读取并且不可写。但是 tmp 配置 (dfs.tmp) 是可写的并写入 /tmp。所以我写信给那里。

    但问题是,如果 json 是嵌套的或者可能包含不寻常的字符,我会得到一个神秘的

    org.apache.drill.common.exceptions.UserRemoteException: SYSTEM ERROR: java.lang.IndexOutOfBoundsException:
    

    如果我有一个看起来像 members: {id:123, name:"joe"} 的结构,我将不得不将选择更改为

    select members.id as members_id, members.name as members_name

    select members.id as `members.id`, members.name as `members.name`

    让它工作。

    我认为原因是 parquet 是“列”存储,因此您需要列。 JSON 不是默认的,所以你需要转换它。

    问题是我必须知道我的 json 架构,并且我必须构建选择以包含所有可能性。如果有人知道更好的方法,我会很高兴。

    【讨论】:

    • 无需选择各个列。一个简单的 select * 应该可以工作。由于您看到错误,我猜您的“成员”结构在不同记录中具有不同数量的字段。并且还要注意,从今天开始,drill 无法处理同一列中的架构更改。因此,如果您有一列 'val1' 包含不同记录的字符串和整数组合,那么钻将无法处理它。
    猜你喜欢
    • 2017-10-25
    • 2018-07-31
    • 2014-03-19
    • 2020-05-10
    • 2020-10-06
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多