scala - 参数数量可变的Spark Sql udf

标签 scala apache-spark apache-spark-sql

我想要一个 Spark Sql 的 concat 函数。 我写了一个udf作为

sqlContext.udf.register("CONCAT",(args:String*)=>{
 String out=""
 for(arg<-args)
  {
    out+=arg
  }
 out
})

sqlContext.sql("select col1,col2,CONCAT(col1,col2) from testtable")

但是这个 udf 不工作,我得到一个异常。 如果我尝试使用固定数量的参数,那么它就可以工作。 我正在使用 spark 1.3.1 和 scala 2.10.5。

有没有人遇到过这个问题或知道解决方案?

最佳答案

您可以使用 struct 函数执行此操作,如下所示:

val myUDF = udf {
  (r: Row) => r.toSeq.map(...) // the "r" row contains your arguments
}
val df = ....
df.select(col("col1"), myUDF(struct(col("col2"), col("col3"), col("col4"), ...)))

关于scala - 参数数量可变的Spark Sql udf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32222505/

相关文章:

scala - 如何在 Scala 中找到两个日期时间之间的时差?

apache-spark - 为什么我只看到 200 个阶段任务?

apache-spark - 了解 SparkSQL 及其对分区的使用

scala - Scala的Vector如何工作?

syntax - 匿名 Scala 函数语法

performance - Apache Spark 连接操作的弱扩展性差

amazon-web-services - 如何获取 AWS EMR 集群中某个步骤的状态?

python - PySpark Dataframe.groupBy MapType 列

scala - IntelliJ : breakpoints in Scala tests won't get hit

java - 导出 Java Scala 项目时,未能获取 scala/ScalaObject