2011-07-06 40 views
3

我是hadoop map reduce framework的新手,我正在考虑使用hadoop map reduce来解析我的数据。我有数千个大分隔文件,我正在考虑编写一个map reduce作业来解析这些文件并将它们加载到配置单元数据仓库中。我在perl中编写了一个解析器,可以解析这些文件。但我坚持做与Hadoop地图相同解析并加载到Hive/Hadoop中

例如:我有一个文件,如 x = ay = bz = c ..... x = py = qz = s ..... x = 1 z = 2 .... 等等

现在我必须加载这个文件为列表(x,y,z)在蜂房表中,但我无法弄清楚我可以继续用它。任何指导,这将是非常有益的。

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

我迷失在现在这个样子,如果任何一个可以指导我这个,我会感激:)

问候, 阿图尔

+0

我也想做同样的事情,你有没有想过......任何建议都会有所帮助,而且要补充一点,如果文件中的一行有多个x,y, z你将如何俱乐部?例如,如果文件中的一行有b c d a b d a b c,我想在x,y,z的hive仓库中添加a,b,c(2次)。 – 2011-07-06 21:55:56

回答

6

我贴的东西,而前到我的博客前一阵子。 (谷歌“蜂巢parse_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的结果会给你地图3密钥值的对。

str_to_map(STR, “ ” “=”)[ “一”]将返回 “1”

str_to_map(STR,“”, “=”)[ “b” 的]将返回 “42”

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 
+0

任何人都知道是否有亚马逊的Elastic Map Reduce的“str_to_map”等价物? “str_to_map”不是那里定义的函数。 – misterbee

+0

str_to_map显然也从AWS Athena中丢失。 –