Программа подсчета слов в Hive

Я пытаюсь узнать улья. Удивительно, но я не могу найти пример того, как написать простое задание подсчета слов. Правильно ли следующее?

Допустим, у меня есть входной файл input.tsv:

hello, world
this is an example input file

Я создаю разделитель в Python, чтобы превратить каждую строку в слова:

import sys

for line in sys.stdin:
 for word in line.split():
   print word

и тогда у меня есть следующее В моем сценарии улья:

CREATE TABLE input (line STRING);
LOAD DATA LOCAL INPATH 'input.tsv' OVERWRITE INTO TABLE input;

-- temporary table to hold words...
CREATE TABLE words (word STRING);

add file splitter.py;

INSERT OVERWRITE TABLE words 
  SELECT TRANSFORM(text) 
    USING 'python splitter.py' 
    AS word
  FROM input;

SELECT word, count(*) AS count FROM words GROUP BY word;

Я не уверен, что я что-то упускаю, или это действительно так сложно. (В частности, нужен ли мне временное words таблица, и мне нужно написать внешнюю функцию splitter?)

3 ответов


Если вы хотите просто увидеть следующее:

SELECT word, COUNT(*) FROM input LATERAL VIEW explode(split(text, ' ')) lTable as word GROUP BY word;

Я использую боковой вид, чтобы включить использование функции с табличным значением (explode), которая берет список, который выходит из функции split и выводит новую строку для каждого значения. На практике я использую UDF, который обертывает IBM ICU4J Word breaker. Обычно я не использую сценарии преобразования и использую UDFs для всего. Вам не нужна временная таблица слов.


CREATE TABLE docs (line STRING);
LOAD DATA INPATH 'text' OVERWRITE INTO TABLE docs;
CREATE TABLE word_counts AS
SELECT word, count(1) AS count FROM
(SELECT explode(split(line, '\s')) AS word FROM docs) w
GROUP BY word
ORDER BY word;

вы можете предложения встроенный UDF в улье следующим образом:

1) Шаг 1: Создайте временную таблицу с одним столбцом с именем предложение типа данных array

create table temp as select sentence from docs lateral view explode(explode(sentences(lcase(line)))) ltable as sentence

2) Шаг 2: Выберите слова из таблицы temp снова взрывая столбец предложение

select words,count(words) CntWords from
(
select explode(words) words from temp
) i group by words order by CntWords desc