Колонка в улье - PullRequest
       36

Колонка в улье

0 голосов
/ 02 июля 2019

Я новичок в Hive и Hadoop Framework.Я пытаюсь написать запрос улья, чтобы разделить столбец, разделенный трубкой '|'персонаж.Затем я хочу сгруппировать 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]

Теперь я попытался использовать боковое представление для разделения массива картографирования на отдельные строки, но он будет разделять все значения, где я хочу разделить по группам.

Ожидаемый:

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 .......

Как этого добиться?

1 Ответ

1 голос
/ 02 июля 2019

Я бы посоветовал вам разделить ваши пары 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"]
...