如何忽视","在数据字段中

时间:2017-01-16 02:36:01

标签: apache-pig

我正在尝试生成以下内容...... 输入 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,"想想你生活的生活,但不要认为这很难伤害生命真的是一种礼物,但同时也是一种诅咒")

我不想把行读成行。

2 个答案:

答案 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';