如何使用ApachePig处理未格式化的数据?

0mkxixxg  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(273)

我想用 Apache pig 但到目前为止,我只解析了csv或逗号分隔等格式化数据。
但是如果我用“;”&“@&@”分隔一些数据等等,我如何处理它?
就像我使用mapreduce时,我用“;”分割数据在map中,然后在reduce中再按“@&@”。
另外,假设我们有一个csv文件,其中第一个字段的用户名是“firstnamelastname”格式,

raw = LOAD 'log.csv' USING PigStorage(',') AS (username: chararray, site: chararray, viwes: int);

通过上面的例子,我们可以得到完整的用户名,但我如何才能得到不同的名称和姓氏?

i7uq4tfw

i7uq4tfw1#

您可以用pig中的udf做java或python所能做的任何事情。pig并不打算拥有一套详尽的处理功能,而只是提供基本的功能。piggybank通过收集一堆社区贡献的udf,填补了定制代码的空白。有时候,小Pig罐就是没有你需要的东西。很好,自定义项的编写非常简单。
您可以编写一个自定义加载程序,在加载时处理数据的唯一结构。自定义load函数使用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));

lyr7nygr

lyr7nygr2#

也许可以使用strsplit第二次拆分字符串:
; 可能会被 \\u003B

相关问题