无法删除 Pig 中的特殊字符

Posted

技术标签:

【中文标题】无法删除 Pig 中的特殊字符【英文标题】:Unable to Remove Special Characters In Pig 【发布时间】:2014-09-19 17:17:31 【问题描述】:

我有一个文本文件要加载到我的 Pig Engine 上, 文本文件的名称在单独的行中,数据但有错误......特殊字符......像这样的东西:

Ja@@$s000on   
J@@a%^ke
T!!ina
Mel@ani

我想使用 REGEX 从所有名称中删除特殊字符 ....我发现在 pig 中完成这项工作的一种方法,最后将输出作为...

Jason
Jake
Tina
Melani

谁能告诉我将在 Pig 中完成这项工作的正则表达式。 还要编写执行此操作的命令,因为我无法使用 REGEX_EXTRACTREGEX_EXTRACT_ALL 函数。 也有人可以解释一下我们在定义正则表达式后作为参数传递给这个函数的数字 1 的意义是什么。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您可以使用 REPLACE 和 RegEx 来解决这个问题。

input.txt  
Ja@@$s000on  
J@@a%^ke T!!ina Mel@ani  

PigScript:
A = LOAD 'input.txt' as line;  
B = FOREACH A GENERATE REPLACE(line,'([^a-zA-Z\\s]+)','');  
dump B;  

Output:  
(Jason)  
(Jake Tina Melani)  

【讨论】:

是的,这个功能确实有效。还有一件事,你什么时候需要使用 FLATTEN 运算符。因为每个加载操作员都将数据存储在一个包中...所以我可以直接在数据上使用诸如 REPLACE 之类的功能还是我需要先展平文件? 如果您使用 REPLACE 运算符,则不需要 FLATTEN。如果使用 REGEX_EXTRACT_ALL,则需要 FLATTEN,bcoz 默认情况下 REGEX_EXTRACT_ALL 将 Tuple 作为输出数据类型返回。【参考方案2】:

There is no way to escape these characters when they are part of the values in a tuple, bag, or map, but there is no problem whatsoever in loading these characters in when part of a string. Just specify that field as type chararray

请看here

【讨论】:

以上是关于无法删除 Pig 中的特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

加载值字段包含逗号和特殊字符的 csv 文件时,Hadoop Pig“加载”问题

如何验证pig中的数据类型?

无法在正则表达式和 nltk 的帮助下删除特殊字符

使用 Mongo 集合中的特殊字符

删除scrapy python中的特殊字符

从R中的字符串中删除所有特殊字符?