gpt4 book ai didi

hadoop - 解析并加载到 Hive/Hadoop

转载 作者:可可西里 更新时间:2023-11-01 14:25:52 26 4
gpt4 key购买 nike

我是 hadoop map reduce 框架的新手,我正在考虑使用 hadoop map reduce 来解析我的数据。我有数以千计的大分隔文件,我正在考虑为其编写一个映射缩减作业来解析这些文件并将它们加载到配置单元数据仓库中。我已经用 perl 编写了一个可以解析这些文件的解析器。但是我坚持对 Hadoop map reduce 做同样的事情

例如:我有一个像这样的文件x=a y=b z=c.....x=p y=q z=s.....x=1 z=2 ....等等

现在我必须将此文件加载为配置单元表中的列 (x,y,z),但我无法弄清楚是否可以继续它。对此的任何指导都会非常有帮助。

这样做的另一个问题是有些文件缺少字段 y。我必须在 map reduce 作业中包含该条件。到目前为止,我已经尝试使用 streaming.jar 并将我的 parser.pl 作为映射器作为该 jar 文件的输入。我认为这不是解决问题的方法 :),但我只是在尝试这样做是否可行。另外,我考虑过使用 Hive 的加载函数,但是如果我在 hive 表中指定 regexserde,则缺少的列会产生问题。

我现在迷失了,如果有人可以指导我,我将不胜感激:)

问候,阿图尔

最佳答案

我不久前在我的博客上发布了一些东西。 (谷歌“hive parse_url”应该是前几名)

我正在解析 url 但在这种情况下你会想要使用 str_to_map .

str_to_map(arg1, arg2, arg3)
  • arg1 => 要处理的字符串
  • arg2 => 键值对分隔符
  • arg3 => 键值分隔符
str = "a=1 b=42 x=abc"
str_to_map(str, " ", "=")

str_to_map 的结果会给你一个map<str, str> 3 个键值对。

str_to_map(str, " ", "=")["a"] --will return "1"

str_to_map(str, " ", "=")["b"] --will return "42"

我们可以通过以下方式将其传递给 Hive:

INSERT OVERWRITE TABLE new_table_with_cols_x_y_z
(select params["x"], params["y"], params["z"]
from (
select str_to_map(raw_line," ","=") as params from data
) raw_line_from_data
) final_data

关于hadoop - 解析并加载到 Hive/Hadoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6600843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com