通过将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)
$col
被UDF(C0)
取代,但我期望的是toBoolean(C0)
。
这甚至可能吗?
Spark版本:1.6
答案 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)