我试图处理一个HDFS文件,其中有不可打印的chracters。我希望使用MapReduce删除这些字符。
我曾尝试使用Pig TextLoader和MR TextInputFormat(在MR程序中),结果将记录从遇到不可打印字符的位置拆分为多个。下面是示例数据:
===数据==(2条记录)=
4614:2011-12-20-08.45.08.169176^2011-12-20-18.15.08.100008^597^0^57^ZUKA^Grase^^^Grase,Dr^^^N^N^N^Dr^KG^ONLY INFORMATION ENTERED^UNKNOWN^0 ^ ^^^611190362
�^0^^^^^^0^Grase,Dr^^^, ,^^^^^^597^^^<fnm>DR</fnm><lnm>GRASE</lnm>^^^^^^^^SINGLE^0^0
6063:2010-07-04-04.00.00.100001^2010-07-04-04.01.00.180144^017^0^095^WEETE ^Wien^^^Wien,Colock^^^N^N^N^Colock^KG^ONLY INFORMATION ENTERED^UNKNOWN^0 ^ ^295111915^^������9905^0^^^^^^0^Wien,Colock^40001 KIN RD^300 CAMORE ST^500 BLACK AVE^Woesfield, HA, 43723.^John Ball^^^25719110^617^������9905^^<fnm>COLOCK</fnm><lnm>WIEN</lnm>^^^^^^^^SINGLE^0^0
下面是我使用基本UDF所做的尝试(代码片段如下)。不过,该程序正在对>0x80的charcters进行条带化,但对拆分的记录执行条带化。
任何帮助/指针将不胜感激!!
/*
*
* Pig Code:
* register '/basepath/udf/DIF.jar'
rel1 = LOAD '/user/home/test' USING USING TextLoader();
rel2 = FOREACH rel1 GENERATE StripNonPrintable(s) as recordline;
dump rel2;
*
*/
//Imports
public class StripNonPrintable extends EvalFunc<String>
{
public String exec(Tuple input) throws IOException {
if (input == null || input.size() == 0)
return null;
try{
String s = new String();
s = (String)input.get(0);
//s = "2001-12-20-08.45.08.169176^2001-12-20-08.45.08.131408^597^0^57^ZUCKA^Grase^^^Grase,Dr^^^N^N^N^Dr^KG^ONLY INFORMATION ENTERED^UNKNOWN^0 ^ ^^^6785790362�^0^^^^^^0^Grase,Dr^^^, ,^^^^^^597^^^<fnm>DR</fnm><lnm>GRASE</lnm>^^^^^^^^SINGLE^0^0";
int length = s.length();
char[] oldChars = new char[length];
s.getChars(0, length, oldChars, 0);
int newLen = 0;
for (int j = 0; j < length; j++) {
char ch = oldChars[j];
if (ch < 0x80 ) {
oldChars[newLen] = ch;
newLen++;
}
}
s = new String(oldChars, 0, newLen);
//System.out.println("New String = \n " + s);
return s;
}catch(Exception e){
return null ;
}
}
}
包java.lang.character
。有一个函数gettype
,该函数:
返回一个值,该值指示字符的一般类别
导入java.lang.character
并替换:
if (ch < 0x80 )
int c = Character.getType(ch);
if(c != Character.CONTROL ||
c != Character.CONNECTOR_PUNCTUATION ||
c != Character.CURRENCY_SYMBOL ||
c != Character.DASH_PUNCTUATION ||
c != Character.DECIMAL_DIGIT_NUMBER ||
c != Character.ENCLOSING_MARK ||
c != Character.END_PUNCTUATION ||
c != Character.FINAL_QUOTE_PUNCTUATION ||
c != Character.INITIAL_QUOTE_PUNCTUATION ||
c != Character.LETTER_NUMBER ||
c != Character.LOWERCASE_LETTER ||
c != Character.MATH_SYMBOL ||
c != Character.MODIFIER_LETTER ||
c != Character.MODIFIER_SYMBOL ||
c != Character.OTHER_LETTER ||
c != Character.OTHER_NUMBER || //remove it if you want to get rid of ½
c != Character.OTHER_PUNCTUATION ||
c != Character.OTHER_SYMBOL ||
c != Character.START_PUNCTUATION ||
c != Character.TITLECASE_LETTER ||
c != Character.UPPERCASE_LETTER)
使用getID3,有时标签中有特殊字符(带问号的小黑钻),但我似乎无法删除它们 我尝试了这里的一切 PHP:如何删除字符串中所有不可打印的字符? 在数据库(phpMyAdmin)中,当打印出来时,它们显示为??在数据的开头。 问题是,我根本不希望这些字符出现在数据库中(无论它们是否正确显示或显示为问号) 但是,我尝试过的所有代码都不会删除PHP中的这些特殊字符
问题内容: 我得到的用户输入包括非ASCII字符和不可打印的字符,例如 例如: 所需的输出: 使用Java删除它们的最佳方法是什么? 我尝试了以下操作,但似乎不起作用 输出量 问题答案: 您的要求不清楚。Java 中的所有字符都是Unicode字符,因此,如果将其删除,将留下一个空字符串。我假设您的意思是您要删除任何非ASCII,不可打印的字符。 此处, 代表可打印ASCII字符的POSIX字符类
我想我需要删除字符0-31和127。 是否有一个函数或一段代码来高效地做到这一点?
问题内容: 我想我需要删除0-31和127字符, 是否有功能或一段代码可以有效地做到这一点。 问题答案: 7位ASCII? 如果您的Tardis刚好在1963年登陆,并且您只想要7位可打印的ASCII字符,则可以使用以下方法从0-31和127-255中删除所有内容: 它匹配0-31、127-255范围内的任何内容并将其删除。 8位扩展ASCII? 您掉进了热水浴缸计时机,而您又回到了八十年代。如果
问题内容: 我正在用Python编写程序,并希望将终端中打印的最后一个字符替换为另一个字符。 伪代码为: 我正在使用Windows8 OS,Python 2.7和常规解释器。 到目前为止,我看到的所有选项都不适合我。(例如:,(#为1),)。 这些选项是在其他Stack Overflow问题或其他资源中提出的,似乎对我不起作用。 编辑 :也使用不会改变影响。它只是不会擦除最后打印的字符。相反,使用
使用绘制时,删除网格线的标准方法似乎是徒劳的。 例如,如果我们绘制一个简单的< code>ggplot对象,这将删除网格 回报 但是当您使用绘制时,相同的代码无法删除网格