【发布时间】:2016-11-06 09:10:02
【问题描述】:
长期以来一直被困在一个问题上。任何帮助都是不言而喻的。 所以我在 /home/hadoop/pig 目录中有一个数据集文件。我可以查看该文件,因此没有权限问题。 数据集有 4 列,以“::”作为分隔符。 我在 /home/hadoop/pig 目录中以本地模式运行 pig。
ratingsData = LOAD 'ratings.dat' AS (line:chararray);
ratings = FOREACH ratingsData GENERATE FLATTEN(REGEX_EXTRACT_ALL(line,'(.*?)::(.*?)::(.*?)::(.*?)')) AS (uid:int, mid:int, rating:int, timestamp:long);
grouped_mid = GROUP ratings BY mid;
dump grouped_mid;
上述脚本失败。我可以成功转储“ratingsData”和“ratings”关系,但不能转储 grouped_mid。但这是奇怪的部分。下面的脚本运行成功。
ratingsData = LOAD 'ratings.dat' AS (line:chararray);
ratings = FOREACH ratingsData GENERATE FLATTEN(REGEX_EXTRACT_ALL(line,'(.*?)::(.*?)::(.*?)::(.*?)')) AS (uid:int, mid:int, rating:int, timestamp:long);
STORE ratings INTO 'ratingInfo.txt';
X = LOAD 'ratingInfo.txt' AS (uid:int, mid:int, rating:int, timestamp:long);
grouped_mid = GROUP X BY mid;
dump grouped_mid;
显然,第二个脚本有一个多余的步骤。我只是存储一个关系并再次重新加载它。我想避免这种情况。 任何澄清/解释都将是非常可观的。
非常感谢。
【问题讨论】:
-
我在同一数据集的微型(4 行)大小的样本上进行了尝试。我在 VI 中手动将“::”更改为逗号,并使用 PigStorage 将其加载到关系中,即没有使用 REGEX_EXTRACT_ALL。它运行良好,我可以转储 grouped_mid。
标签: hadoop apache-pig bigdata