Pig Latin 中的用户定义函数

Posted

技术标签:

【中文标题】Pig Latin 中的用户定义函数【英文标题】:User Defined Function in Pig Latin 【发布时间】:2016-03-09 13:41:13 【问题描述】:

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

public String exec(Tuple input) 
    throws IOException 

  if(input.equals("age"))
      outputFile = new FileWriter("C:\\UDF\\output_age.csv");
  else
      outputFile = new FileWriter("C:\\UDF\\output_general.csv");
  

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

【问题讨论】:

哪里失败了? 只是没有创建csv文件 我可以建议编辑udf 标签吗?我个人认为 UDF 是 Universal Disk Format 而不是“用户定义的函数”。如果将两者混合使用可能会很混乱......不幸的是,我还不确定如何编辑/更改标签 c:\UDF 存在吗?你有写它的权限吗? 元组参数永远不会等于字符串“age”。您必须从元组中提取元素,就像它是一个列表一样。另外,如果你不是在本地模式下运行pig,则无法写入文件,因为文件系统是HDFS,没有C盘 【参考方案1】:

在编写 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。

【讨论】:

以上是关于Pig Latin 中的用户定义函数的主要内容,如果未能解决你的问题,请参考以下文章

pig latin - 计数不同并分组

读取非定界 asciif 文件 Apache Pig Latin

Pig用户自定义函数(UDF)转

使用 Pig latin 从文件中获取最大日期

MAX(Count) 函数 apache pig latin

Apache Pig 和用户定义函数