我正在尝试生成以下内容...... 输入 396124436476092416,"想想你生活的生活,但不要认为这很难伤害生命真的是一种礼物,但同时也是一种诅咒",Obey_Jony09 396124440112951296," 00:00#MAW",WesleyBitton
A = LOAD '/user/root/data/tweets.csv' USING PigStorage(',') as (users:chararray, tweets:chararray);
B = FILTER A by users == '396124436476092416';
输出被截断 (396124436476092416,"想想你生活的生活,但不要认为这很难伤害生命才是真正的礼物)
输出除外 (396124436476092416,"想想你生活的生活,但不要认为这很难伤害生命真的是一种礼物,但同时也是一种诅咒")
我不想把行读成行。
答案 0 :(得分:1)
您可以使用CSVLoader加载数据
然而,如果您不希望这样做,那么Apache Pig本身就可以解决这个问题:
- 加载您的数据
A = LOAD 'your/path/users.csv' USING TextLoader() AS (unparsed:chararray);
- 将"
字符串替换为|
,以便分开您的推文
B = FOREACH A GENERATE REPLACE(unparsed, '\\"', '|') AS parsed:chararray;
- 将临时解析数据存储到您的位置
STORE B INTO 'your/path/parsed_users.csv' USING PigStorage('|');
- 加载您解析的数据
C = LOAD 'your/path/parsed_users.csv' USING PigStorage('|') AS (users:chararray, tweets:chararray);
- 转储您的数据,但这仍然会包含一个额外的逗号(,
),但您可以使用替换功能替换它。
DUMP C;
答案 1 :(得分:0)
这适合csv standardization,所以你只需要使用CSVLoader
支持包含逗号和其他内容的双引号字段 双引号用反斜杠转义。
这是如何使用它:
register file:/home/hadoop/lib/pig/piggybank.jar
DEFINE CSVLoader org.apache.pig.piggybank.storage.CSVLoader();
A = LOAD '/user/root/data/tweets.csv' USING CSVLoader AS (users:chararray, tweets:chararray);
B = FILTER A by users == '396124436476092416';