Pig Latin中的用户定义函数

时间:2016-03-09 13:41:13

标签: java hadoop apache-pig user-defined-functions pig-udf

我正在使用Java在Hadoop环境中为Pig Latin创建用户定义函数UDF。我想创建多个输出文件。我试图创建一个Java程序来输出这些CSV文件,如下所示:

public string CreateThumbnail(byte[] b, string parentImageName)
    {
        Bitmap bmp;

        using (var ms = new MemoryStream(b))
        {
            bmp = new Bitmap(ms);
        }

        Bitmap thumbnail = bmp;

        Rectangle rect = new Rectangle(5, 5, 10, 10);

        if (bmp.Width > bmp.Height)
            thumbnail = bmp.Clone(rect, bmp.PixelFormat);
        else if (bmp.Height > bmp.Width)
            thumbnail = bmp.Clone(new Rectangle((bmp.Height/2) - (bmp.Width/2), 0, bmp.Width, bmp.Width), bmp.PixelFormat);

        byte[] bmpArray = new byte[0];

        using (var ms = new MemoryStream())
        {
            finalCrop.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            ms.Close();

            bmpArray = ms.ToArray();
        }

        var name = "Thumbnail_" + parentImageName;

        RepositoryFactory.AzureStorageRepository.SaveThumbnail(bmpArray, name, "jpg/image", CurrentUser.UserOrganization.Organization.Id);

        return BaseBlobUrl + "thumbnails/" + name;


    }

但这不起作用。有没有其他方法可以做到这一点,无论是Java还是Pig Latin本身?

1 个答案:

答案 0 :(得分:0)

在编写UDF时,您需要处理数据类型。这里exec方法将元组作为输入。要读取元组值,您需要使用tuple.get(0)表示法。即。

public String exec(Tuple input) 
    throws IOException {
  String inputAge = input.get(0).toString();
  if(inputAge.equals("age")){
      // file creation logic 
      outputFile = new FileWriter("C:\\UDF\\output_age.csv");
  }else{
      // file creation logic
      outputFile = new FileWriter("C:\\UDF\\output_general.csv");
  }
}

您可以参考Writing Java UDF in Pig作为参考。