18

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

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

4

3 回答 3

5

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

首先,您将推断 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 作业进行导入。

于 2015-05-28T17:20:41.717 回答
4

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

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

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

于 2015-01-17T05:52:03.223 回答
1

要完成@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`

让它工作。

我认为原因是镶木地板是“列”商店,因此您需要列。默认情况下不是 JSON,因此您需要对其进行转换。

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

于 2015-07-15T12:07:14.847 回答