在hadoop中,我有一个类似这样的reducer,它可以将以前的Map器中的数据转换为一系列非Map器的文件 InputFormat
兼容类型。
protected void setup(Context context) {
LocalDatabase ld = new LocalDatabase("localFilePath");
}
protected void reduce(BytesWritable key, Text value, Context context) {
ld.addValue(key, value)
}
protected void cleanup(Context context) {
saveLocalDatabaseInHDFS(ld);
}
我正在用pig重写我的应用程序,但不知道如何在pig udf中完成这个操作,因为没有清除函数或其他任何东西来指示udf何时完成运行。如何在Pig身上做到这一点?
2条答案
按热度按时间aiazj4mn1#
如果希望在udf结束时运行某些内容,请使用finish()调用。这将在您的自定义项处理完所有记录后调用。它将被每个Map器或reducer调用一次,与reducer中的cleanup调用相同。
xggvc2p62#
我想说你需要写一个
StoreFunc
udf, Package 您自己的自定义outputformat—这样您就能够以输出格式的RecordWriter.close()
方法。但是,这将在hdfs中为每个reducer创建一个数据库,因此如果您希望所有内容都包含在单个文件中,则需要使用单个reducer运行,或者运行第二步将数据库合并在一起。
http://pig.apache.org/docs/r0.10.0/udf.html#load-存储功能