我正在使用Apache Pig处理一些数据
我的数据集包含一些包含特殊字符的字符串,即(#,{}[])
。
这programming pig book表示你无法逃避这些角色。
那么如何在不删除特殊字符的情况下处理数据呢?
我考虑过更换它们但想避免这种情况。
谢谢
答案 0 :(得分:1)
您是否尝试过加载数据?当它们是元组,包或地图中的值的一部分时,无法转义这些字符,但在字符串的一部分加载这些字符时没有任何问题。只需将该字段指定为chararray
类型。
这里唯一需要注意的问题是,你的字符串是否包含Pig用作字段分隔符的字符 - 例如,如果你是USING PigStorage(',')
并且你的字符串包含逗号。但只要您没有告诉Pig将您的字段解析为地图,#
,[
和]
就会处理得很好。
答案 1 :(得分:1)
最简单的方法是,
input = LOAD 'inputLocation' USING TextLoader() as unparsedString:chararray;
TextLoader只是将每行输入读入String,无论该字符串内部是什么。然后,您可以使用自己的解析逻辑。
答案 2 :(得分:0)
编写加载器函数时,不要返回带有例如元组的元组。将地图映射为字符串(因此稍后依靠Utf8StorageConverter来转换为地图权限):
Tuple tuple = tupleFactory.newTuple( 1 );
tuple.set(0, new DataByteArray("[age#22, name#joel]"));
您可以直接创建和设置Java地图:
HashMap<String, Object> map = new HashMap<String, Object>(2);
map.put("age", 22);
map.put("name", "joel");
tuple.set(0, map);
这非常有用,尤其是如果你必须在加载过程中进行解析。