hadoop - 如何在 Hive (Hadoop) 中解析一个字符串(来自不同的表)并将其加载到不同的表

标签 hadoop map hive bigdata

我有这个表作为输入:

Table Name:Deals
Columns: Doc_id(BIGINT),Nv_Pairs_Feed(STRING),Nv_Pairs_Category(STRING)
For Example:
Doc_id: 4997143658422483637
Nv_Pairs_Feed: "TYPE:Wiper Blade;CONDITION:New;CATEGORY:Auto Parts and Accessories;STOCK_AVAILABILITY:Y;ORIGINAL_PRICE:0.00"
Nv_Pairs_Category: "Condition:New;Store:PartsGeek.com;"

我正在尝试解析字段:“Nv_Pairs_Feed”和“Nv_Pairs_Category”并提取它们的 N:V 对(每对由“;”分隔,每个名称和值由“:”分隔)。 我的目标是将每个 N:V 作为一行插入此表中:

Doc_id | Name | Value | Source_Field

期望结果示例:

4997143658422483637 | Condition | New | Nv_Pairs_Category
4997143658422483637 | Store     | PartsGeek.com | Nv_Pairs_Category
4997143658422483637 | TYPE | Wiper Blade | Nv_Pairs_Feed
4997143658422483637 | CONDITION | New | Nv_Pairs_Feed
4997143658422483637 | CATEGORY | Auto Parts and Accessories | Nv_Pairs_Feed
4997143658422483637 | STOCK_AVAILABILITY | Y | Nv_Pairs_Feed
4997143658422483637 | ORIGINAL_PRICE | 0.00 | Nv_Pairs_Feed

最佳答案

您可以使用标准 Hive UDF str_to_map 将字符串转换为映射,然后使用 Brickhouse UDF ( http://github.com/klout/brickhouse ) map_key_valuescombinenumeric_range 分解这些 map 。即像下面这样的东西

create view deals_map_view as
  select doc_id, 
     map_key_values(
         combine( map_to_str( nv_pairs_feed, ';', ':'),
                  map_to_str( mv_pairs_category, ';', ':'))) as deals_map_key_values
 from deals;


 select
   doc_id,
    array_index( deals_map_key_values, i ).key as name,
    array_index( deals_map_key_values, i ).value as value
   from deals_map_view
   lateral view numeric_range( size( feed_map_key_values) ) i1 as i

您可能可以使用 explode_map UDF 做类似的事情

关于hadoop - 如何在 Hive (Hadoop) 中解析一个字符串(来自不同的表)并将其加载到不同的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20610436/

相关文章:

hive - pyhs2/hive 没有文件匹配路径文件和文件存在

hadoop - 如何格式化NameNode?

hadoop - HBase MapReduce交互

d3.js - 当我有陆地坐标信息时,如何在 d3 中使用 topojson 为海洋着色?

c++ - 如何从一个 map 键列表中减去另一个 map 键列表并获得新 map ( map A - mab B = map C)

java - 有没有可以代替键的排序Map

hadoop - hive 在分区表上添加列不起作用

hadoop - java.lang.IllegalArgumentException : Wrong FS 异常

hadoop - Hive 中的多个 Where 子查询不起作用

python - 错误状态'。 (35) (SQLExecDirectW)