Следующий код можно использовать для фильтрации строк, которые содержат значение 1. На изображении много столбцов.
import org.apache.spark.sql.types.StructType
val df = sc.parallelize(Seq(
("r1", 1, 1),
("r2", 6, 4),
("r3", 4, 1),
("r4", 1, 2)
)).toDF("ID", "a", "b")
val ones = df.schema.map(c => c.name).drop(1).map(x => when(col(x) === 1, 1).otherwise(0)).reduce(_ + _)
df.withColumn("ones", ones).where($"ones" === 0).show
Недостатком здесь является то, что в идеале он должен останавливаться при первом таком условиивстретилТ.е. найден первый столбец.ОК, мы все это знаем.
Но я не могу найти элегантный метод для достижения этого без предположительно использования UDF или очень специфической логики.Карта обработает все столбцы.
Можно ли поэтому использовать складку (слева), которая может закончиться, когда возможно первое обнаружение?Или какой-то другой подход?Может быть недосмотр.