使用 Apache Pig 从文件中读取字符串数组
Reading array of strings from file with Apache Pig
我在外部存储一个 Hive table,这是一个非常简单的数据结构。 table 在 Hive 中创建为
(user string, names array<string>)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY '[=10=]1'
STORED AS TEXTFILE
(我也尝试过其他分隔符)。
在 Pig 中,我似乎想不出使用包或元组来加载简单数组的正确方法!这是我尝试过的失败方法:
users = load '<file>' using PigStorage() AS (user:chararray, names:bag{tuple(name:chararray)})
users = load '<file>' using PigStorage() AS (user:chararray, names:chararray)
和其他一些东西,但我得到的最好的结果是将它们作为单个字符串加载,并删除分隔符(这没有帮助)。如何只加载可变长度的字符串数组?
谢谢
假设您在 HDFS
上的 /user/hdfs/tester/ip/test 文件中有以下数据
cat test:
1 A,B
2 C,D,E,F
3 G
4 H,I,J,K,L,M
在 Pig Mapreduce 中执行以下操作:
a = LOAD '/user/hdfs/tester/ip/test' USING PigStorage('\t') as (id:INT,names:chararray);
b = FOREACH a GENERATE id, FLATTEN(TOBAG(STRSPLIT(names,','))) as value:tuple(name:CHARARRAY);
第一列是id,value是CHARARRAY的元组。
我在外部存储一个 Hive table,这是一个非常简单的数据结构。 table 在 Hive 中创建为
(user string, names array<string>)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY '[=10=]1'
STORED AS TEXTFILE
(我也尝试过其他分隔符)。
在 Pig 中,我似乎想不出使用包或元组来加载简单数组的正确方法!这是我尝试过的失败方法:
users = load '<file>' using PigStorage() AS (user:chararray, names:bag{tuple(name:chararray)})
users = load '<file>' using PigStorage() AS (user:chararray, names:chararray)
和其他一些东西,但我得到的最好的结果是将它们作为单个字符串加载,并删除分隔符(这没有帮助)。如何只加载可变长度的字符串数组?
谢谢
假设您在 HDFS
上的 /user/hdfs/tester/ip/test 文件中有以下数据cat test:
1 A,B
2 C,D,E,F
3 G
4 H,I,J,K,L,M
在 Pig Mapreduce 中执行以下操作:
a = LOAD '/user/hdfs/tester/ip/test' USING PigStorage('\t') as (id:INT,names:chararray);
b = FOREACH a GENERATE id, FLATTEN(TOBAG(STRSPLIT(names,','))) as value:tuple(name:CHARARRAY);
第一列是id,value是CHARARRAY的元组。