配置单元中的映射类型变量

Posted

技术标签:

【中文标题】配置单元中的映射类型变量【英文标题】:Map type variable in hive 【发布时间】:2013-01-25 03:02:16 【问题描述】:

我在尝试在 hive 中定义地图类型时遇到问题。根据Hive Manual 肯定有一个地图类型,不幸的是没有任何关于如何使用它的例子。 :-(

假设,我有一个包含以下列的表(用户):

Name     Ph    CategoryName

此“类别名称”列具有一组特定的值。现在我想创建一个将 CategoryName 映射到 CategoryID 的哈希表。我试着做:

set hivevar:nameToID=map('A',1,'B',2); 

我有两个问题:

    当我执行set hivevar:$nameToID['A'] 时,我认为它会将值打印为 1。但我得到了 “$hivevar:nameToID['A'] 未定义”

    我不知道该怎么说,select name, ph, $nameToID[CategoryName] from users

【问题讨论】:

【参考方案1】:

假设您有下表:

describe test;
name      string    
ph        string    
category  map<string,int>

select * from test;
name    ph  category
Name1   ph1 "type":1000,"color":200,"shape":610
Name2   ph2 "type":2000,"color":200,"shape":150
Name3   ph3 "type":3000,"color":700,"shape":167

访问地图栏:

select ph, category["type"], category["color"] from test;
ph1    1000    200
ph2    2000    200
ph3    3000    700

使用 Hive 变量的等效项:

set hivevar:nameToID=
   map("t", category["type"], "c", category["color"], "s", category["shape"]);

select ph, $nameToID["t"], $nameToID["c"] from test;
ph1    1000    200
ph2    2000    200
ph3    3000    700

这适用于 Hive 0.9.0

【讨论】:

感谢洛兰德的回复。我刚刚检查了我们节点上的 hive 版本,不幸的是它是 0.8.1.6。所以我觉得我在这里不走运。 :-( 无论如何感谢您的帮助! 嗨洛兰,这是我正在尝试的:hive&gt; set hivevar:nameToID=map("t","2","c","1");hive&gt; set $nameToID["t"];$nameToID["t"] is undefined 你想达到什么目的? Hive 变量/属性是 [key=value] 对。 set $nameToID["t"] 似乎不完整。如果您想使用 hivevar 访问地图值,请参阅上面的答案。另请注意,在访问集合的值时,您不能同时评估返回所需索引的任何函数(在这种情况下,您将收到 Non-constant expression for map indexes not supported 错误)。这就是我在地图值中定义完整字段名称的原因。

以上是关于配置单元中的映射类型变量的主要内容,如果未能解决你的问题,请参考以下文章

字符串映射转换配置单元

在配置单元中,如何获取具有键,值的子集的映射

如何在配置单元中获取复杂数据类型列的长度

如何在映射到Spring配置类列表中的环境变量中转义逗号

pyspark 使用名称中的变量将数据框保存到配置单元表

如何将配置单元映射到弹性搜索 _id 字段