J'ai besoin de charger de HBaseStorage de Pig à HBase et je n'arrive pas à comprendre comment charger avec un nombre variable de colonnes pour une famille de colonnes spécifique. nombre connu de colonnes il est facile)Ajouter un nombre variable de colonnes pour la famille de colonnes dans HBase à l'aide de Pig
des données qui ressemble à ceci: (espaces ajoutés pour readibility)
Id,ItemId,Count,Date
1 ,1 ,2 ,2015-02-01
2 ,2 ,2 ,2015-02-02
3 ,1 ,2 ,2015-02-03
et je une table HBase avec RowKey et une famille colonne appelées attributs. Donc, je charge d'abord le csv en utilisant:
A = LOAD 'items.csv' USING PigStorage(',')
as (Id,ItemId,Count:chararray, CreationDate:chararray);
Et maintenant, je veux les regrouper par ItemId donc je fais ce qui suit:
B = FOREACH A GENERATE ItemId, TOTUPLE(Date, Count);
C = GROUP B BY ItemId
donc je récupérer mes données bien groupées, avec la clé, puis les tuples avec la date et le comte:
1 {(2015-02-03, 2),(2015-02-01, 2)}
2 {(2015-02-02, 2)}
et ce que je visais dans HBase est d'avoir une ligne avec deux colonnes, avec la date et comptent:
Rowkey = 1 (Attributes.2015-02-03,2) (Attributes.2015-02-01,2)
Rowkey = 2 (Attributes.2015-02-02,2)
Et c'est la partie avec laquelle je me bats, comment puis-je définir que j'ai un nombre variable de colonnes? Je l'ai essayé ce qui suit, ainsi que plusieurs autres combinaisons:
STORE onlygroups into 'hbase://mytable'
USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('Attributes:*');
Mais obtenir plusieurs erreurs, par exemple celui-ci:
ERROR 2999: Unexpected internal error. org.apache.pig.data.InternalCachedBag
cannot be cast to java.util.Map
J'ai aussi essayé d'utiliser TOMAP mais ne fonctionne pas non plus. Aucune suggestion?
Remarque: la solution recommandée identifiée comme étant en double ne résout pas mon problème, elle recommande fondamentalement d'utiliser MapReduce et ma structure de données est différente.
Copie possible de [Colonne Apache: Colonnes dynamiques] (http://stackoverflow.com/questions/26866697/apache-pig-dynamic-columns) –
Merci @RahulSharma mais j'ai déjà essayé et cela n'a pas fonctionné. Aussi sur celui-ci il dit d'essayer MapReduce, pas vraiment le résoudre avec Pig. – xmorera
HbaseStorage peut ajouter dynamiquement des colonnes mais ici, chaque enregistrement a un identifiant et un sac de tuples qui est à l'origine de l'erreur. Dans ce cas, vous devez écrire votre UDF pour exploser le sac PIG en tuples individuels, puis essayez-le. –