首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蜂巢中的分裂列

蜂巢中的分裂列
EN

Stack Overflow用户
提问于 2019-07-02 04:45:39
回答 1查看 1.1K关注 0票数 0

我对Hive和Hadoop框架很陌生。我正在尝试编写一个单元查询,以分割由管道‘\’字符分隔的列。然后,我想将两个相邻的值分组,并将它们分隔成不同的行。

例如,我有一张桌子

代码语言:javascript
复制
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, "\\|")来拆分列,这给了我数组

代码语言:javascript
复制
id mapper

1  [a,0.1,b,0.2]
2  [c,0.2,d,0.3,e,0.6]
3  [f,0.6]

现在,我尝试使用横向视图将mapper数组拆分为不同的行,但它将分离所有值,就像我希望按组分隔的值。

预期:

代码语言:javascript
复制
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]

实际

代码语言:javascript
复制
id mapper

1  a
1  0.1
1  b
1  0.2 
etc .......

我怎样才能做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-02 05:21:42

我建议你把你的双split(mapper, '(?<=\\d)\\|(?=\\w)')分开。

代码语言:javascript
复制
split('c|0.2|d|0.3|e|0.6', '(?<=\\d)\\|(?=\\w)')

结果:

代码语言:javascript
复制
["c|0.2","d|0.3","e|0.6"]

然后爆炸产生的数组并由|拆分。

更新:

如果您也有数字,并且浮点数在十进制标记之后只有一个数字,那么正则表达式应该扩展到split(mapper, '(?<=\\.\\d)\\|(?=\\w|\\d)')

更新2:

好的,最好的方法是拆分第二个|,如下所示

代码语言:javascript
复制
split(mapper, '(?<!\\G[^\\|]+)\\|')

例如:

代码语言:javascript
复制
split('6193439|0.0444035224643987|6186654|0.0444035224643987', '(?<!\\G[^\\|]+)\\|')

结果:

代码语言:javascript
复制
["6193439|0.0444035224643987","6186654|0.0444035224643987"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56845470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档