【问题标题】:How to load into Hive a mapreduce result?如何将 mapreduce 结果加载到 Hive 中?
【发布时间】:2018-06-21 11:36:38
【问题描述】:

我有一个目录,用于存储具有以下格式的 mapreduce 结果:“(integer1, integer2, integer3)”,我想将该数据加载到 Apache Hive。

首先我创建这样的表:

创建表测试(field1 int,field2 int,field3 int);

后来我尝试以这种方式加载数据:

将路径'/user/myuser/output/test'中的数据加载到表test中;

路径没问题,表加载了几行但都是空的(3个字段为NULL)。

我该如何解决?

【问题讨论】:

  • 请出示您的数据文件。括号需要删除,并且您没有告诉 Hive 如何解析该文件
  • 感谢 cricket_007!

标签: hadoop hive mapreduce


【解决方案1】:

轻松修复。在你的MR程序中写入如下格式的数据

integer1,integer2,integer3

然后像这样创建你的表

CREATE TABLE mytable
(
a INT,
b INT,
c INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";

如果由于某种原因您无法更改 MR 程序..您可以使用 Hive 删除括号并从原始输出创建一个新文件以遵循表格预期的格式(上面列出的格式)

【讨论】:

    【解决方案2】:

    感谢 hlagos 和 cricket_007,这两个答案都对我有很大帮助。

    我修改了我的 MR 程序,现在输出是这样的:

    1 13 15 
    1 16 150    
    1 23 75 
    1 41 13 
    1 54 323    
    1 81 34 
    10 13 364   
    

    还修改了表创建:

    create table test (
      field1 int,
      field2 int,
      field3 int
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY " ";
    

    并且加载数据保持不变:

    load data inpath '/user/myuser/output/test' into table test;
    

    现在我确实从第一列和第二列获取了数据,但没有从第三列获取数据。

    【讨论】:

    • 我想指出load data inpath 是不需要的。您可以在 MapReduce 输出目录上创建一个外部 Hive 表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多