【问题标题】:How to write a Pig UDF in Scala如何在 Scala 中编写 Pig UDF
【发布时间】:2013-11-04 22:11:22
【问题描述】:

我正在尝试在 Scala 中编写 Pig UDF(使用 Eclipse)。我在 java 构建路径中添加了 pig.jar 作为库,这似乎解决了以下 2 个导入:

  • 导入 org.apache.pig.EvalFunc
  • 导入 org.apache.pig.data.Tuple

但是我遇到了 2 个无法解决的错误:

  1. org.apache.pig.EvalFunc[T] 没有构造函数
  2. value get 不是 org.apache.pig.data.Tuple 的成员(虽然我确信 Tuple 有 get 方法)

这里是完整的代码:

package datesUDFs
import org.apache.pig.EvalFunc
import org.apache.pig.data.Tuple
class getYear extends EvalFunc {
  val extractDate = """^(\d\d\d\d)-\d\d-\d\d \d\d:\d\d:\d\d""".r
  def isDate(dtString: String): Boolean = extractDate.findFirstIn(dtString).nonEmpty

  override def exec(input: Tuple): Int = input.get(0) match {
    case dtString: String =>
      if (!isDate(dtString)) throw new IllegalArgumentException("Invalid date string!")
      else (for (extractDate(year) <- extractDate.findFirstIn(dtString)) yield year).head.toInt
    case _ => throw new IllegalArgumentException("Invalid function call!")
  }
}

谁能帮我解决这个问题?

提前致谢!!!

【问题讨论】:

    标签: java eclipse scala apache-pig


    【解决方案1】:

    除了必须指定 EvalFunc 类型参数之外,您的代码对我来说编译得很好。

    package datesUDFs
    import org.apache.pig.EvalFunc
    import org.apache.pig.data.Tuple
    class getYear extends EvalFunc[Int] { // This is the only line I changed.
      val extractDate = """^(\d\d\d\d)-\d\d-\d\d \d\d:\d\d:\d\d""".r
      def isDate(dtString: String): Boolean = extractDate.findFirstIn(dtString).nonEmpty
    
      override def exec(input: Tuple): Int = input.get(0) match {
        case dtString: String =>
          if (!isDate(dtString)) throw new IllegalArgumentException("Invalid date string!")
          else (for (extractDate(year) <- extractDate.findFirstIn(dtString)) yield year).head.toInt
        case _ => throw new IllegalArgumentException("Invalid function call!")
      }
    }
    

    看看是否有帮助,有时 ScalaIDE 会抱怨错误的事情。

    【讨论】:

    • 谢谢杰克。不幸的是,尽管我仍然遇到同样的错误?你使用 Eclipse 还是从 shell 编译?如果是这样,你的命令行是什么?再次感谢
    【解决方案2】:

    解决了!我将 hadoop-common-2.2.0.jarcommons-logging-1.1.3.jar 添加到我的 java 构建路径中,问题得到解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多