从列获取UDF函数

时间:2017-07-06 14:39:03

标签: scala apache-spark apache-spark-sql spark-dataframe

通过将c1函数应用于UDF获得列c。是否可以从c1返回并将应用的函数设为c

背景:

我有一个专栏c

val c  = df("C0")

我应用UDF函数来获取列c1

val c1 = toBoolean(c)

现在,我有一个字符串表达式val myFilter = "$col = true",其中我想用$col列替换单词c1

val c2 = expr(myFilter.replace("$col",s"$c1"))

这给了我一栏c2

  

c2:org.apache.spark.sql.Column =(' UDF(C0)= true)

$colUDF(C0)取代,但我期望的是toBoolean(C0)

这甚至可能吗?

Spark版本:1.6

1 个答案:

答案 0 :(得分:0)

如果你真的需要坚持使用字符串表达式,一个选项是注册你的udf:

sqlContext.udf.register("toBoolean", toBoolean)

然后你可以直接在expr函数中使用它:

val c1 = expr("toBoolean(c)") 

val myFilter = "$col = true"

val c2 = expr(myFilter.replace("$col", s"$c1"))
  

c2:org.apache.spark.sql.Column =(toBoolean(C0)= true)