这里有新的Apache Pig用户。我基本上拥有一种格式的数据,需要将其拆分为6列以创建我想要的模式,然后加载到Pig中以运行我现有的脚本。
如果下面的格式不整洁,我很抱歉,由于信誉得分,我无法上传图片。
现有格式有3列
用户设备值:: key:bytearray值:value:bytearray
user1-mobile 20130306-AC 9
user1-mobile 20130306-AT 21
user2-laptop 20130306-BC 0
所需格式:
用户设备日期类型“计数或时间”值
user1 mobile 20130306 A C 9
user1 mobile 20130306 A T 21
有关如何完成此操作的任何建议?我需要写一个正则表达式吗? 这里很棘手的是所有列都有一个分隔符( - ),除了“Type”和列“C或T”
答案 0 :(得分:0)
如果你没有共同的分隔符,我可以想到两种可能性:
您可以按照此处的说明实现自己的LoadFunc:http://ofps.oreilly.com/titles/9781449302641/load_and_store_funcs.html
您可以按照此处的说明使用REGEX_EXTRACT_ALL:Apache Pig: Extra query parameters from web log
这里你要去2。:
A = LOAD 'abc.txt' AS (line:CHARARRAY);
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line, '^(.+?)\\-(.+?)\\s(.+?)\\-(.)(.)\\s(.+)$')) AS (User:CHARARRAY,Equipment:CHARARRAY,Date:CHARARRAY,Type:CHARARRAY,CountorTime:CHARARRAY,Value:CHARARRAY);