如何在spark udf中打破for循环

时间:2017-07-20 20:03:39

标签: sql scala apache-spark

所以我有这样的udf:

def myfunc = {udf((A:mutable.WrappedArray[mutable.WrappedArray[String]],B:mutable.WrappedArray[mutable.WrappedArray[String]]) 
=>  breakable{for(i <- 0 to 2)yield( if (A(i)==B(i)) "U" //want to break here 
else "N" //break here)})}

它会给我多个U或N,我希望它只返回一个字母作为最终结果。我如何打破for循环?

2 个答案:

答案 0 :(得分:3)

exists方法测试集合中至少一个元素的某个谓词是否为真:

if ((0 to 2).exists(i => A(i) == B(i))) "U" else "N"

答案 1 :(得分:1)

您可以执行以下操作

import scala.util.control.Breaks._
def myfunc = udf((A: mutable.WrappedArray[mutable.WrappedArray[String]], B: mutable.WrappedArray[mutable.WrappedArray[String]])
=>  breakable{
    for(i <- 0 to 2) yield 
      if (A(i)==B(i)) {
        "U"
        break
      } 
      else {
        "N"
        break
      } 
     })