Если вы хотите проверить / перечислить, содержит ли массив list_errors
, тогда:
df.show()
//+------------------+
//| errorCodes|
//+------------------+
//|[10531, 20254, 10]|
//| [10]|
//+------------------+
def is_exists_any(s: Seq[String]): UserDefinedFunction = udf((c: collection.mutable.WrappedArray[String]) => c.toList.intersect(s).nonEmpty)
val list_errors = Seq("10531", "10144")
df.withColumn("is_exists",is_exists_any(list_errors)(col("errorCodes"))).filter(col("is_exists") === true).show()
//+------------------+---------+
//| errorCodes|is_exists|
//+------------------+---------+
//|[10531, 20254, 10]| true|
//+------------------+---------+
Другой способ получить строки без использования udf - использовать array_intersect, а затем только перечислить строки, где size of array
не 0
.
df.withColumn("is_exists", array_intersect(col("errorCodes"), lit(list_errors))).
filter(size(col("is_exists")) !==0).
show()
//+------------------+---------+
//| errorCodes|is_exists|
//+------------------+---------+
//|[10531, 20254, 10]| [10531]|
//+------------------+---------+