转义Apache pig数据中的特殊字符

时间:2013-04-04 08:33:28

标签: apache-pig

我正在使用Apache Pig处理一些数据 我的数据集包含一些包含特殊字符的字符串,即(#,{}[])

programming pig book表示你无法逃避这些角色。

那么如何在不删除特殊字符的情况下处理数据呢?

我考虑过更换它们但想避免这种情况。

谢谢

3 个答案:

答案 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);

这非常有用,尤其是如果你必须在加载过程中进行解析。