我是Hive和Hadoop框架的新手。我正在尝试编写配置单元查询以拆分由管道'|'分隔的列字符。然后,我想将2个相邻的值归为一组,并将它们分成单独的行。
例如,我有一张桌子
id mapper
1 a|0.1|b|0.2
2 c|0.2|d|0.3|e|0.6
3 f|0.6
我可以使用split(mapper, "\\|")
拆分列,该列为我提供了数组
id mapper
1 [a,0.1,b,0.2]
2 [c,0.2,d,0.3,e,0.6]
3 [f,0.6]
现在,我尝试使用侧面视图将mapper数组拆分为单独的行,但是它将所有值分开,因为我想按组分开。
id mapper
1 [a,0.1]
1 [b,0.2]
2 [c,0.2]
2 [d,0.3]
2 [e,0.6]
3 [f,0.6]
id mapper
1 a
1 0.1
1 b
1 0.2
etc .......
我该如何实现?
答案 0 :(得分:1)
我建议您将split(mapper, '(?<=\\d)\\|(?=\\w)')
对分开,例如
split('c|0.2|d|0.3|e|0.6', '(?<=\\d)\\|(?=\\w)')
产生
["c|0.2","d|0.3","e|0.6"]
然后分解结果数组并用|
分割。
更新:
如果您也有数字,并且浮点数在小数点后仅一位,则正则表达式应扩展为split(mapper, '(?<=\\.\\d)\\|(?=\\w|\\d)')
。
更新2:
好的,最好的方法是按如下所示分割第二个|
split(mapper, '(?<!\\G[^\\|]+)\\|')
例如
split('6193439|0.0444035224643987|6186654|0.0444035224643987', '(?<!\\G[^\\|]+)\\|')
产生
["6193439|0.0444035224643987","6186654|0.0444035224643987"]