1

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

这本编程猪书说你无法逃脱那些字符。

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

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

谢谢

4

3 回答 3

1

最简单的方法是,

input = LOAD 'inputLocation' USING TextLoader() as unparsedString:chararray;

TextLoader 只是将输入的每一行读入一个字符串,而不管该字符串中的内容。然后,您可以使用自己的解析逻辑。

于 2013-04-05T08:35:59.857 回答
1

您是否尝试过加载数据?当这些字符是 tuple、bag 或 map 值的一部分时,没有办法转义这些字符,但是将这些字符加载到字符串的一部分时没有任何问题。只需将该字段指定为 type chararray

您需要注意的唯一问题是您的字符串是否包含 Pig 用作字段分隔符的字符 - 例如,如果您是USING PigStorage(',')并且您的字符串包含逗号。但只要您不告诉 Pig 将您的字段解析为地图,#, [,]就可以很好地处理。

于 2013-04-04T13:02:30.177 回答
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);

这很有用,特别是如果您无论如何都必须在加载期间进行解析。

于 2013-10-16T13:28:23.373 回答