pig:完成udf时执行任务

rdlzhqv9  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(248)

在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身上做到这一点?

aiazj4mn

aiazj4mn1#

如果希望在udf结束时运行某些内容,请使用finish()调用。这将在您的自定义项处理完所有记录后调用。它将被每个Map器或reducer调用一次,与reducer中的cleanup调用相同。

xggvc2p6

xggvc2p62#

我想说你需要写一个 StoreFunc udf, Package 您自己的自定义outputformat—这样您就能够以输出格式的 RecordWriter.close() 方法。
但是,这将在hdfs中为每个reducer创建一个数据库,因此如果您希望所有内容都包含在单个文件中,则需要使用单个reducer运行,或者运行第二步将数据库合并在一起。
http://pig.apache.org/docs/r0.10.0/udf.html#load-存储功能

相关问题