tl;dr我不知道有哪个 Hive UDF 可以为您执行此操作,并且您自己进行转换可能会很糟糕。
不,没有 UDF。至于构建自己的解决方案:
转换为 array[string] 很容易 - 只需使用以下方法删除方括号即可regexp_replace
并将结果字符串拆分为,
.
问题是将任意大小的数组的 array[string] 转换为 array[int] 。您可以将数组元素一一单独转换:
hive> select id, my_array from array_table limit 3;
OK
10023307 ["0.20296966","0.17753501","-0.03543373"]
100308007 ["0.16155224","0.1945944","0.09167781"]
100384207 ["0.025892768","0.023214806","-0.003712816"]
hive> select array(cast(my_array[0] as double), cast(my_array[1] as double), cast(my_array[2] as double)) from array_table limit 3;
OK
[0.20296966,0.17753501,-0.03543373]
[0.16155224,0.1945944,0.09167781]
[0.025892768,0.023214806,-0.003712816]
但这种方法之所以有效,是因为我知道我有长度为 3 的数组。