我的数据中出现了非常奇怪的字符'\ N'。我想从数据中删除或替换此字符。以下是数据样本:
Girls Shoes,1325051884
\N,\N
Men's Shirts,\N
分隔符:逗号(,)
我尝试了几种方法来替换/识别这个\ N字符但不起作用。
答案 0 :(得分:1)
在Pig中,位置符号用美元符号($)表示,并以零(0)开头;例如,$ 0,$ 1,$ 2.
因此,在上面提到的数据中,第一个字段由$ 0标识(例如" Girls Shoes"),第二个字段由$ 1标识(例如1325051884)。
以下脚本具有替换' \ N':
的逻辑A = LOAD '/data.txt' USING PigStorage(',');
B = FILTER A BY ($0 != '\\N') OR ($1 != '\\N');
dump B;
C = FOREACH B GENERATE ($0 == '\\N' ? '' : $0), ($1 == '\\N' ? '' : $1);
dump C;
在哪里' /data.txt'包含以下数据:
Girl's Shoes,1325051884
\N,\N
Men's Shirts,\N
\N,Boy's Pants
<强>逻辑:强>
A = LOAD '/data.txt' USING PigStorage(',');
通过假定分隔符为逗号(,)来加载数据。
B = FILTER A BY ($0 != '\\N') OR ($1 != '\\N');
对于每个加载的记录,按条件过滤记录:$ 0(第一个字段)NOT EQUALS&#39; \ N&#39; OR $ 1(第二个字段)NOT EQUALS&#39; \ N&#39;
此阶段的输出将是(包含&#39; \ N&#39;的第二条记录被过滤掉):
(Girl's Shoes,1325051884)
(Men's Shirts,\N)
(\N,Boy's Pants)
C = FOREACH B GENERATE ($0 == '\\N' ? '' : $0), ($1 == '\\N' ? '' : $1);
对于第二步中生成的每条记录,它会检查:如果$ 0等于&#39; \ N&#39;。如果是,它会发出空白(&#39;&#39;),否则会发出$ 0。类似的逻辑适用于$ 1.
这个阶段的输出将是:
(Girl's Shoes,1325051884)
(Men's Shirts,)
(,Boy's Pants)
你可以看到,&#39; \ N&#39;被替换为空白(&#39;&#39;)。
我正在使用Apache Pig 0.15。此脚本非常适合您的数据。
答案 1 :(得分:0)
A = FILTER data by $2 =='//N'
它将列出具有此类字符外观的所有数据。