Загрузка столбца типа данных карты с использованием скрипта Python в качестве редуктора с использованием hive

В одном из столбцов таблицы Hive я хочу хранить пары ключ-значение. Сложная карта типов данных Hive поддерживает эту конструкцию.

(Это всего лишь игрушечный пример того, что я хочу делать, у меня есть еще много столбцов, которые я хочу сжать вот так)

Итак, я создаю такую ​​таблицу:

hive>DESCRIBE transaction_detailed;
OK
id STRING
time STRING
Time taken: 0.181 seconds

hive>DROP TABLE IF EXISTS transactions;
hive>CREATE EXTERNAL TABLE transactions(
    id STRING,
    time_map MAP<STRING, INT>
    )
partitioned by (dt string) 
row format delimited fields terminated by '\t' collection items terminated by ',' map keys terminated by ':' lines terminated by '\n' 
location 's3://my_loaction/transactions/';

Затем я пытаюсь загрузить столбец карты с помощью редуктора, как описано в коде: структура time_map будет выглядеть примерно так: {"min": time, "max": time, "average": time, "total": время}

hive>FROM( FROM transaction_detailed 
MAP transaction_detailed.id, transaction_detailed.time
USING "python unity mapper -- splits the same thing out as it takes it"
AS id, time
cluster by id) transaction_time_map
insert overwrite table transactions partition(dt="2013-27-03")
REDUCE transaction_time_map.id, transaction_time_map.time
USING "python reducer which takes time_stamp sequence for a single id and summarizes them using min, max, average and total and supposed to insert into map"
as id, time_map;

Но я получаю такую ​​ошибку:

FAILED: Error in semantic analysis: Line 6:23 Cannot insert into target table because column number/types are different "two_day": Cannot convert column 8 from string to map<string,int>.

Как загрузить в столбец карты с помощью редуктора Python?


person darshan    schedule 27.03.2013    source источник


Ответы (1)


Я думаю, что ответ на поставленный выше вопрос - использовать функцию str_to_map(text[, delimiter1, delimiter2]) в улье.

person darshan    schedule 28.03.2013