Hive str_to_map返回map<;字符串,字符串>;。如何制作返回地图<;字符串,int>;?

Hive str_to_map返回map<;字符串,字符串>;。如何制作返回地图<;字符串,int>;?,hive,apache-spark-sql,Hive,Apache Spark Sql,我使用str_to_映射为:- hive> select str_to_map("A:1,B:1,C:1"); OK {"C":"1","A":"1","B":"1"} 正如您所注意到的,它正在返回map类型的对象。我想要map类型的对象。有什么出路吗?我们可以用某种方式键入它来映射吗?我盯着这个,四处看了一会儿,没有看到太多,但结果证明它非常简单——只需使用cast: select cast(str_to_map("A:1,B:1,C:1") as map<string, int

我使用str_to_映射为:-

hive> select str_to_map("A:1,B:1,C:1");
OK
{"C":"1","A":"1","B":"1"}

正如您所注意到的,它正在返回map类型的对象。我想要map类型的对象。有什么出路吗?我们可以用某种方式键入它来映射吗?

我盯着这个,四处看了一会儿,没有看到太多,但结果证明它非常简单——只需使用
cast

select cast(str_to_map("A:1,B:1,C:1") as map<string, int>)
-- {'A': 1, 'B': 1, 'C': 1}
选择cast(str-to-map(“A:1,B:1,C:1”)作为映射)
--{'A':1,'B':1,'C':1}
您可以尝试使用自定义项:


失败,语法错误:-失败:ParseException行1:41无法识别“map”附近的输入嗯,Spark SQL对我来说工作得非常好,我假设它与HiveQL等效…看起来不太相似,可能有细微的差异
> add jar hdfs:///lib/brickhouse-0.7.1-SNAPSHOT.jar;
> create temporary function map_remove_keys as 'brickhouse.udf.collect.MapRemoveKeysUDF';
> select map_remove_keys(map("", 0), array(""));
+------+
| _c0  |
+------+
| {}   |
+------+