如何使用Scala调用UDF

时间:2015-09-09 10:27:40

标签: scala apache-spark apache-spark-sql user-defined-functions

如何通过DataFrame API在Scala中表达以下代码?

sqlContext.read.parquet("/input").registerTempTable("data")
sqlContext.udf.register("median", new Median)
sqlContext.sql(
  """
    |SELECT
    |  param,
    |  median(value) as median
    |FROM data
    |GROUP BY param
""".stripMargin).registerTempTable("medians")

我是通过

开始的
val data = sqlContext.read.parquet("/input")
sqlContext.udf.register("median", new Median)
data.groupBy("param")

但他们我不知道如何调用median函数。

1 个答案:

答案 0 :(得分:0)

您可以使用callUDF

data.groupBy("param").agg(callUDF("median", $"value"))

或直接致电:

val median = new Median
data.groupBy("param").agg(median($"value"))

// Equivalent to
data.groupBy("param").agg(new Median()($"value"))

不过,我认为使用object而不是class会更有意义。