Hive 将字符串转换为字符数组

2024-03-12

例如,如何将字符串转换为字符数组

"abcd" -> ["a","b","c","d"]

我知道分割方法:

SELECT split("abcd","");

#["a","b","c","d",""]

最后一个空格有错误吗?或任何其他想法?


这实际上不是一个错误。蜂巢分割功能 https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFSplit.java只需调用底层JavaString#split(String regexp, int limit) https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-int-方法与limit参数设置为-1,这会导致返回尾随空格。

我不会深入探讨为什么会发生这种情况的实现细节,因为已经有一个精彩的答案 https://stackoverflow.com/a/27477312/2271325描述了这个问题。注意str.split("", -1)根据您使用的 Java 版本,将返回不同的结果。

一些替代方案:

  1. Use "(?!\A|\z)"作为分隔符正则表达式, e.g. split("abcd", "(?!\\A|\\z)")。这将使正则表达式匹配器跳过零宽度匹配在字符串的开始和结束位置。
  2. 创建自定义 UDF使用任一String#toCharArray(),或接受limit作为 UDF 的参数,因此您可以将其用作:SPLIT("", 0)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive 将字符串转换为字符数组 的相关文章

随机推荐