Этот UDF будет работать нормально, просто убедитесь, что он вызывается только для входов, которые не равны нулю:
.withColumn("result",when($"arr".isNotNull and $"string".isNotNull, stringInArrayContains($"arr","string"))))
, иначе обработайте нули внутри UDF:
def stringInArrayContains = udf((array: collection.mutable.WrappedArray[String], str: String) => if(array==null || str==null) null else array.filter(x => x.contains(str)).mkString(";"))