我对Hive和Hadoop框架很陌生。我正在尝试编写一个单元查询,以分割由管道‘\’字符分隔的列。然后,我想将两个相邻的值分组,并将它们分隔成不同的行。
例如,我有一张桌子
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 .......我怎样才能做到这一点?
发布于 2019-07-02 05:21:42
我建议你把你的双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"]https://stackoverflow.com/questions/56845470
复制相似问题