我想使用Apache pig
,但到目前为止,我只是解析了格式化的数据,如csv或逗号分隔等
但是如果我有一些数据用';' &'@&@'等,我如何使用它?
就像我使用MapReduce时一样,我在map中使用";"分割数据,然后在reduce中使用"@&@"分割数据。
同样假设我们有一个csv文件第一字段username是FirstnameLastname格式,
raw = LOAD 'log.csv' USING PigStorage(',') AS (username: chararray, site: chararray, viwes: int);
通过上面的例子,我们可以得到完整的用户名,但是我怎么能得到名字和Lastname不同?
您可以在Pig中使用udf做Java或Python可以做的任何事情。Pig并不打算提供详尽的处理功能集,而只是提供基本功能。Piggybank通过收集一堆社区贡献的udf,填补了自定义代码的空白。有时候,储蓄罐里没有你需要的东西。udf编写起来非常简单,这是件好事。
-
您可以编写一个自定义加载程序,在加载时处理数据的唯一结构。自定义加载函数用Java代码操作数据,并输出Pig正在寻找的结构化柱状格式。客户加载器的另一个好处是你可以指定加载模式所以你不需要写
AS (...)
A = LOAD 'log.csv' USING MyCustomLoader('whatever', 'parameters);
-
你可以写一个自定义的求值函数。有时像
SPLIT
或TOKENIZE
这样的函数不够好。使用TextLoader逐行获取数据,然后使用UDF来解析该行并输出元组(然后可以将其平化为列)。A = LOAD 'log.csv' USING TextLoader() as (line:char array); B = FOREACH A GENERATE FLATTEN(CustomLineParser(line));
也许你可以在第二次使用STRSPLIT来分割字符串:
;
也可以被\u003B
分割