我想使用Apache pig
,但直到现在我刚刚解析了格式化数据,如csv或逗号分隔等。
但如果我有一些数据用';'分隔&安培; '@& @'等,我该如何使用它?
就像我使用 MapReduce 时一样,我按“;”分割数据在地图中,然后在“减少”中再次使用“@& @”。
另外假设我们有一个带有第一个字段用户名的csv文件,该用户名由“FirstnameLastname”格式构成,
raw = LOAD 'log.csv' USING PigStorage(',') AS (username: chararray, site: chararray, viwes: int);
通过上面的例子,我们可以获得整个用户名,但是如何才能使Name和Lastname不同?
答案 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。有时像SPLIT
或TOKENIZE
这样的函数不够好。使用TextLoader逐行获取数据,然后跟进UDF来解析该行并输出一个元组(然后可以将其展平为列)。
A = LOAD 'log.csv' USING TextLoader() as (line:char array);
B = FOREACH A GENERATE FLATTEN(CustomLineParser(line));
答案 1 :(得分:2)
也许您可以使用STRSPLIT第二次拆分字符串:
同样;
可以按\\u003B