Apache pig 如何使用不同的pig存储操作符将数据加载到pig中

Apache pig 如何使用不同的pig存储操作符将数据加载到pig中,apache-pig,hadoop2,Apache Pig,Hadoop2,我是ApachePig新手,尝试加载测试twitter数据,以找出每个用户名的tweet数量。下面是我的数据 format(twitterId,comment,userRefId): 当我试图使用PigStorage(',')将数据加载到Pig中时,它也将我的注释部分分隔为多个字段,因为注释也可能有','。请让我知道如何在Pig中正确加载此数据。我正在使用以下命令: data = LOAD '/home/vinita/Desktop/Material/PIG/test.csv' using

我是ApachePig新手,尝试加载测试twitter数据,以找出每个用户名的tweet数量。下面是我的数据

format(twitterId,comment,userRefId):

当我试图使用PigStorage(',')将数据加载到Pig中时,它也将我的注释部分分隔为多个字段,因为注释也可能有','。请让我知道如何在Pig中正确加载此数据。我正在使用以下命令:

data = LOAD '/home/vinita/Desktop/Material/PIG/test.csv' using PigStorage(',') AS (id:chararray,comment:chararray,refId:chararray);

将记录加载到一行中,然后将“替换为|和”,替换为|。这将确保字段分开,然后使用STRSPLIT获取3个字段

A = LOAD 'data.txt' AS (line:chararray);
B = FOREACH A GENERATE REPLACE(REPLACE(line,',"','|'),'",','|');
C = FOREACH B GENERATE STRSPLIT($0,'\\|',3);
DUMP C;
编辑: 我使用示例文本来运行脚本,效果很好


将记录加载到一行中,然后将“用|和”替换为|。这将确保字段分开,然后使用STRSPLIT获取3个字段

A = LOAD 'data.txt' AS (line:chararray);
B = FOREACH A GENERATE REPLACE(REPLACE(line,',"','|'),'",','|');
C = FOREACH B GENERATE STRSPLIT($0,'\\|',3);
DUMP C;
编辑: 我使用示例文本来运行脚本,效果很好


如果在源数据中更改分隔符是一种选择,我会选择这条路线。使开始和跟踪问题变得更加容易

如果将分隔符更改为|,则代码可能如下所示:

data = LOAD '/home/vinita/Desktop/Material/PIG/test.csv' using PigStorage('|') AS (id:chararray,comment:chararray,refId:chararray);

如果在源数据中更改分隔符是一种选择,我会选择这种方式。使开始和跟踪问题变得更加容易

如果将分隔符更改为|,则代码可能如下所示:

data = LOAD '/home/vinita/Desktop/Material/PIG/test.csv' using PigStorage('|') AS (id:chararray,comment:chararray,refId:chararray);

是否可以修改源数据以使用不同的分隔符?@darkownage:Yes是否可以修改源数据以使用不同的分隔符?@darkownage:Yes将数据作为行加载时,只加载行中的第一个字段值,而不是整个数据…:(@VinitaGupta您的load语句是什么样子的?不要使用PigStorage。@请注意,我使用以下语句将数据加载为行:X=load'/home/vinita/Desktop/Material/PIG/test1.csv'使用PigStorage(',')作为(行:chararray);这是不正确的。它应该是X=load'/home/vinita/Desktop/Material/PIG/test1.csv'作为(行:chararray)@investive|u mind谢谢你纠正我:)我已经按照你的建议加载了数据,并将“替换为|和”,替换为|,之后将“|”替换为“,”。但现在它将数据视为单列数据,而不是3列。因此,我无法按用户名对数据进行分组,以按每个用户名计算推文数。当以行形式加载数据时,它只加载行中的第一个字段值,而不是整个数据…:(@VinitaGupta您的load语句是什么样子的?不要使用PigStorage。@请注意,我使用以下语句将数据加载为行:X=load'/home/vinita/Desktop/Material/PIG/test1.csv'使用PigStorage(',')作为(行:chararray);这是不正确的。它应该是X=load'/home/vinita/Desktop/Material/PIG/test1.csv'作为(行:chararray)@investive|u mind谢谢你纠正我:)我已经按照你的建议加载了数据,并将“替换为|和”,替换为|,之后将“|”替换为“,”。但现在它将数据视为单列数据,而不是3列。因此,我无法按用户名分组数据,以按每个用户名计算推文数。我想在不更改源数据的情况下解决此问题,请让我知道是否可以解决此问题。我想在不更改源数据的情况下解决此问题,请让我知道是否可以这样做