Pig - 删除换行、回车和制表符

Posted

技术标签:

【中文标题】Pig - 删除换行、回车和制表符【英文标题】:Pig - Remove line feed, return and tab 【发布时间】:2016-03-25 00:01:53 【问题描述】:

我正在尝试从 Pig 的列中删除字符:\n、\t 和 \r,但我得到了错误的输出。

这是我正在做的事情:

qr_1 = LOAD 'hdfs://localhost:9000/sample.csv' USING PigStorage(',') as (Id:int,PostTypeId:int,AcceptedAnswerId:int,ParentId:int,CreationDate:chararray,DeletionDate:chararray,Score:int,ViewCount:int,Body:chararray,OwnerUserId:int,OwnerDisplayName:chararray,LastEditorUserId:int,LastEditorDisplayName:chararray,LastEditDate:chararray,LastActivityDate:chararray,Title:chararray,Tags:chararray,AnswerCount:int,CommentCount:int,FavoriteCount:int,ClosedDate:chararray,CommunityOwnedDate:chararray);
qr_1 = FOREACH qr_1 GENERATE Id .. ViewCount, REPLACE(Body,'\n','') as Body, OwnerUserId .. ;
qr_1 = FOREACH qr_1 GENERATE Id .. ViewCount, REPLACE(Body,'\r','') as Body, OwnerUserId .. ;   
qr_1 = FOREACH qr_1 GENERATE Id .. ViewCount, REPLACE(Body,'\t','') as Body, OwnerUserId .. ;   

输入:

5585779,1,5585800,,2011-04-07 18:27:54,,1432,3090250,"<p>How can I convert a <code>String</code> to an <code>int</code> in Java?</p>

<p>My String contains only numbers and I want to return the number it represents.</p>

<p>For example, given the string <code>""""1234""""</code> the result should be the number <code>1234</code>.</p>",537967,,2756409,user166390,2015-09-10 21:30:42,2016-03-07 00:42:49,Converting String to Int in Java?,<java><string><type-conversion>,12,0,239

输出:

(5585779,1,5585800,,2011-04-07 18:27:54,,1432,3090250,"<p>How can I convert a <code>String</code> to an <code>int</code> in Java?</p>,,,,,,,,,,,,,)
(,,,,,,,,,,,,,,,,,,,,,)
(,,,,,,,,,,,,,,,,,,,,)
(,,,,,,,,,,,,,,,,,,,,,)
(,,537967,,2756409,user166390,,,Converting String to Int in Java?,,12,0,239,,,,,,,,,)

我在做什么?

谢谢。

“\\n”也没有区别。

【问题讨论】:

为什么不能先按行读取数据,再用逗号分割? @cricket_007 因为 Body 列包含换行符。 你的正文栏不能包含逗号吗? 它包含逗号、\\n 和 \\r。我想删除它们,这样 Pig 就不会将 Body 列分成多个部分。 【参考方案1】:

您的数据中有逗号,这就是字段和架构不匹配的原因。使用CSVLoader,然后使用REPLACE 命令替换'\\t'、'\\n'、'\\r'

<p>For example, given the string

【讨论】:

以上是关于Pig - 删除换行、回车和制表符的主要内容,如果未能解决你的问题,请参考以下文章

c#如何去除字符串中的空格,回车,换行符,制表符

Java字符代码中干掉制表符回车符和换行符

Java如何去除字串中的空格、回车、换行符、制表符

SQL替换制表回车换行符和首尾空格

java去除字符串的空格,换行符,水平制表符,回车

Python中strip()lstrip()rstrip()用法详解