Мне нужно загрузить из Pig в HBase с помощью HBaseStorage, и я не могу понять, как загрузить с переменным количеством столбцов для определенного семейства столбцов (с известным количеством столбцов это просто)
Данные, которые выглядят следующим образом: (для удобства чтения пробелы добавлены)
Id,ItemId,Count,Date
1 ,1 ,2 ,2015-02-01
2 ,2 ,2 ,2015-02-02
3 ,1 ,2 ,2015-02-03
И у меня есть таблица HBase с ключом строки и одним семейством столбцов под названием Атрибуты. Итак, я сначала загружаю csv, используя:
A = LOAD 'items.csv' USING PigStorage(',')
as (Id,ItemId,Count:chararray, CreationDate:chararray);
А теперь я хочу сгруппировать их по ItemId, поэтому делаю следующее:
B = FOREACH A GENERATE ItemId, TOTUPLE(Date, Count);
C = GROUP B BY ItemId
Итак, я получаю свои данные хорошо сгруппированными, с ключом, а затем кортежи с Date и Count:
1 {(2015-02-03, 2),(2015-02-01, 2)}
2 {(2015-02-02, 2)}
И в HBase я стремлюсь иметь одну строку с двумя столбцами, с датой и количеством:
Rowkey = 1 (Attributes.2015-02-03,2) (Attributes.2015-02-01,2)
Rowkey = 2 (Attributes.2015-02-02,2)
И это та часть, с которой я борюсь, как мне определить, что у меня есть переменное количество столбцов? Я пробовал следующие, а также несколько других комбинаций:
STORE onlygroups into 'hbase://mytable'
USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('Attributes:*');
Но получаю несколько ошибок, например такую:
ERROR 2999: Unexpected internal error. org.apache.pig.data.InternalCachedBag
cannot be cast to java.util.Map
Я также пробовал использовать TOMAP, но тоже не работает. Какие-либо предложения?
Примечание: рекомендуемое решение, обозначенное как дубликат, не решает мою проблему, оно в основном рекомендует использовать MapReduce, а моя структура данных отличается.