【问题标题】:User Defined Function in Pig LatinPig 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盘

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


【解决方案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

【讨论】:

    猜你喜欢
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多