【发布时间】:2017-10-20 16:53:55
【问题描述】:
所以我是 Apache PIG 的初学者。我正在尝试对一些数据进行分组,然后将分组结果发送到用户定义的函数以进行进一步处理。所以数据是一个csv,看起来像这样
DAY;STATION;HOUR;TEMPERATURE
我的 PIG 文件代码:
REGISTER /path/to/jar/myUdf.jar;
weather_data = LOAD 'file:///path/to/file/weather_small.csv' USING PigStorage(';') AS (date:chararray, station:int, hour:int, temperature:Bigdecimal);
by_hour = GROUP weather_data by (hour, date);
DUMP by_hour
to_udf = FOREACH by_hour GENERATE myUdfs.Test();
STORE to_udf INTO 'myoutput' using PigStorage(',');
我的用户定义的功能代码,还没有做任何事情,因为我没有得到所有的数据:
package myUdfs;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
public class Test extends EvalFunc<String> {
@Override
public String exec(Tuple tuple) throws IOException {
return tuple.toString();
}
}
这是 DUMP 命令的输出。这是分组调用的实际结果。
最后这是最终reducer输出文件中的数据
((24,11/23/2000),{(11/23/2000,24)})
((24,11/23/2013),{(11/23/2013,24)})
((24,11/27/2009),{(11/27/2009,24)})
((24,11/30/2000),{(11/30/2000,24)})
((24,12/10/2013),{(12/10/2013,24)})
((24,12/13/2009),{(12/13/2009,24)})
((24,12/14/2007),{(12/14/2007,24)})
((24,12/23/2008),{(12/23/2008,24)})
((24,12/24/2007),{(12/24/2007,24)})
如您所见,输出是不同的。站和温度信息未发送到用户定义的函数。但它存在于由呼叫组产生的原始袋子中。
我需要将所有信息发送到用户定义的函数。所以温度和车站信息也需要传递给udf
很抱歉,这篇文章很长,但这是我可以清楚地解释问题的唯一方法。
【问题讨论】:
标签: apache-pig user-defined-functions