【问题标题】:Hive convert a string to an array of charactersHive 将字符串转换为字符数组
【发布时间】:2018-06-26 21:34:05
【问题描述】:

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

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

我知道拆分方法:

SELECT split("abcd","");

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

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

【问题讨论】:

    标签: hive hiveql


    【解决方案1】:

    这实际上不是一个错误。 Hive split function 只需调用底层 Java String#split(String regexp, int limit) 方法,并将 limit 参数设置为 -1,这会导致返回尾随空格。

    我不打算深入研究为什么会发生这种情况的实现细节,因为已经有一个 brilliant answer 描述了这个问题。请注意,str.split("", -1) 将根据您使用的 Java 版本返回不同的结果。

    一些替代方案:

    1. 使用"(?!\A|\z)" 作为分隔符正则表达式,例如split("abcd", "(?!\\A|\\z)")。这将使正则表达式匹配器在字符串的开始和结束位置跳过 零宽度匹配
    2. 创建自定义 UDF 使用 String#toCharArray(),或接受 limit 作为 UDF 的参数,因此您可以将其用作:SPLIT("", 0)

    【讨论】:

      【解决方案2】:

      我不知道这是一个错误还是它的工作原理。作为替代方案,您可以使用 explodecollect_list 从 where 子句中排除空格

      SELECT collect_list(l) 
      FROM ( SELECT EXPLODE(split('abcd','') ) as l ) t 
      WHERE t.l <> '';
      

      【讨论】:

      • 感谢您的回答,我知道collect_list 方法,但是拆分的结果令人困惑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多