2014-11-11 3 views
0

У меня есть набор данных (CSV), который имеет 3 столбца значения (v1, 2 и 3) со значением. Описание значения сохраняется как строка с разделителями-запятыми в столбцах «ключи».Apache Pig: Динамические столбцы

| v1 | v2 | v3 | keys | 
| A | C | E | X,Y,Z | 

Использование Pig я хотел бы, чтобы загрузить эту информацию в таблице HBase, где колонна Семья является C и колонна Классификатор является ключевым.

| C:X | C:Y | C:Z | 
| A | C | E | 

Кто-нибудь сделал это раньше и хотел бы поделиться этим знанием?

Другой вариант - сохранить карту (значение ключа #) в столбце HBase. Но я не уверен, что это гибко для запроса данных?

Спасибо заранее

ответ

0

Найдено решение моей проблемы

test.pig:

REGISTER data.py using jython as myfuncs 

A = LOAD 'data' using PigStorage('|') AS (
    id:chararray, 
    date:chararray, 
    v1:chararray, 
    v2:chararray, 
    v3:chararray, 
    keys:chararray, 
); 

B = FOREACH A { 
GENERATE 
    id, 
    date, 
    myfuncs.dataToMap(STRSPLIT(keys, ','), TOTUPLE(v1, v2, v3)) as kv; 
} 

STORE B INTO 'pig_table' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('e:date kv:*'); 

data.py:

import org.apache.pig.data.DataType as DataType 
import org.apache.pig.impl.logicalLayer.schema.SchemaUtil as SchemaUtil 

@outputSchema("ud:map[]") 
def dataToMap(keys, values): 

result = dict() 
keys = list(keys) 
values = list(values) 

try: 
    while True: 
     values.remove(None) 
except ValueError: 
    pass 

for idx in range(len(keys)): 
    result[keys[idx]] = values[idx] 

return result 
0

Это общая проблема при обработке нескольких структуры схемы. Если вы действительно хотите попробовать это с помощью типа MAP, это плохая идея.

Вы можете попробовать это с помощью MapReduce. MapReduce - лучшее решение для этого.

+0

Спасибо за ваш ответ. Есть ли вероятность, что вы можете дать более подробную информацию или примеры? – Bas

+0

вам нужен пример MapReduce? – user1989252

+0

Я по-прежнему предпочитаю разрешать его внутри свиньи, но я дам MR попробовать. У вас есть пример? – Bas

Смежные вопросы