2017-07-04 83 views
0

我已经编写了一个UDF函数,它将在处理2列后返回一列(0或1)。我需要我的选择查询,使其返回那些记录此值为1 我写的查询如下:Spark SQL:在WHERE子句中指定从UDF生成的列名

SELECT number, myUDF(col1, col2) as result 
    FROM mytable 
    WHERE result is not null 

但是它不能识别列名“结果”。是否有任何特殊的语法来识别这个新的输出列?谢谢。

+0

这是我发现的。 WHERE子句在SELECT子句(*)之前处理,因此别名不可用。移至使用子查询。 –

回答

1

CASE语句应该在这里解决的问题:

SELECT number, CASE when myUDF(col1, col2) = 1 then myUDF(col1, col2) END as result FROM mytable

+0

太好了。谢谢。但这会是最佳的吗? UDF会被调用两次还是会被优化? –