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



我想使用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);
    
  • 你可以写一个自定义的求值函数。有时像SPLITTOKENIZE这样的函数不够好。使用TextLoader逐行获取数据,然后使用UDF来解析该行并输出元组(然后可以将其平化为列)。

    A = LOAD 'log.csv' USING TextLoader() as (line:char array);
    B = FOREACH A GENERATE FLATTEN(CustomLineParser(line));
    

也许你可以在第二次使用STRSPLIT来分割字符串:

;也可以被\u003B分割

相关内容

  • 没有找到相关文章

最新更新