Hive: разбить строку, используя регулярное выражение в качестве отдельного столбца - PullRequest
2 голосов
/ 25 февраля 2020

У меня есть строка в текстовом столбце. Я хочу извлечь значения хештега из строки в новую таблицу, чтобы я мог найти различное количество для каждого хештега.

Пример строки ->

NeverTrump больше никогда не будет. Они были раздавлены вчера вечером в Кливленде в Комитете по правилам голосованием 87-12. СДЕЛАЙТЕ АМЕРИКУ БОЛЬШОЙ СНОВА!

CrookedHillary превосходит меня на 31: 1 во Флориде, Огайо и Пенсильвании. Я еще не начал!

Кривый Хиллари не квалифицирован!

MakeAmericaSafeAgain! #GOPConvention #RNCinCLE

MakeAmericaGreatAgain # ImWithYou

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Я обрисовал в общих чертах шаги здесь, поскольку я не очень хорош с запросом, может обновить ответ, как только я получу его правильно

  1. Заменить «#» в строке на «#».
  2. разбить каждое слово в строке с пробелом в качестве разделителя.
  3. использовать explode() функцию бокового обзора для получения всех слов строки.
  4. использовать WHERE условие для получения записей, начинающихся с "#". LIKE '#%' условие должно сработать.
  5. затем добавьте группу по условию, чтобы получить счетчик каждого хэштега.
0 голосов
/ 25 февраля 2020

Это то, что @lazilyInitialised сказал, я сделал запрос с вашим примером данных:

with your_data as (--This is your data example, use your table instead of this CTE
select stack( 1, 
1, --ID
"   NeverTrump is never more. They were crushed last night in Cleveland at Rules Committee by a vote of 87-12. MAKE AMERICA GREAT AGAIN!

    CrookedHillary is outspending me by a combined 31 to 1 in Florida, Ohio, & Pennsylvania. I haven't started yet!

    CrookedHillary is not qualified!

    MakeAmericaSafeAgain!#GOPConvention #RNCinCLE

    MakeAmericaGreatAgain #ImWithYou
"
) as (id, str)
)

select id, word as hashtag
from
(
select id, word
  from your_data d
       lateral view outer explode(split(regexp_replace(d.str, '#',' #' ),'\\s')) l as word --replace hash w space+hash, split and explode words
)s 
where word rlike '^#'      
;

Результат:

OK
id      hashtag
1       #GOPConvention
1       #RNCinCLE
1       #ImWithYou
Time taken: 0.405 seconds, Fetched: 3 row(s)
...