【问题标题】:Apache PIG - Full result of GROUP BY not passing into user defined functionApache PIG - GROUP BY 的完整结果未传递给用户定义的函数
【发布时间】: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


    【解决方案1】:

    你没有向你的 UDF 函数传递任何东西,实际上它会自动传递 group 有点令人惊讶

    试试

    to_udf = FOREACH by_hour GENERATE myUdfs.Test(weather_data);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 2017-06-10
      • 2021-09-04
      • 2016-09-04
      相关资源
      最近更新 更多