我们如何将Apache Pig用于未格式化的数据?

时间:2011-12-26 13:19:09

标签: hadoop mapreduce apache-pig

我想使用Apache pig,但直到现在我刚刚解析了格式化数据,如csv或逗号分隔等。

但如果我有一些数据用';'分隔&安培; '@& @'等,我该如何使用它?

就像我使用 MapReduce 时一样,我按“;”分割数据在地图中,然后在“减少”中再次使用“@& @”。

另外假设我们有一个带有第一个字段用户名的csv文件,该用户名由“FirstnameLastname”格式构成,

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

通过上面的例子,我们可以获得整个用户名,但是如何才能使Name和Lastname不同?

2 个答案:

答案 0 :(得分:4)

你可以做任何Java或Python可以在Pig中使用UDF做的事情。 Pig并不打算拥有一套详尽的处理功能,而只是提供基本功能。 Piggybank通过收集一堆社区贡献的UDF来填补自定义代码的利基。有时,皮球只是没有你需要的东西。 UDF编写起来非常简单,这是一件好事。

  • 您可以编写一个custom loader来处理加载时数据的唯一结构。自定义加载函数使用Java代码处理数据,并输出Pig正在查找的结构化列式格式。客户加载器的另一个好处是您可以指定加载模式,因此您不必写出AS (...)

    A = LOAD 'log.csv' USING MyCustomLoader('whatever', 'parameters);
    
  • 你可以写一个custom evaluation function。有时像SPLITTOKENIZE这样的函数不够好。使用TextLoader逐行获取数据,然后跟进UDF来解析该行并输出一个元组(然后可以将其展平为列)。

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

答案 1 :(得分:2)

也许您可以使用STRSPLIT第二次拆分字符串:

同样;可以按\\u003B

拆分