Выбор строк на основе проверок нескольких столбцов фрейма данных - PullRequest
0 голосов
/ 20 июня 2020

У меня есть следующий фрейм данных

ID Names Marks1 Marks2 Marks3
1  A     50     102    87
2  B     54     75     83
3  C     5      175    43
4  D     35     75     80
5  E     87     75     B
6  F     93     75     83

У меня есть список столбцов val colsForCheck = List(Marks1, Marks2, Marks3)

И проверки, такие как

  • 50 <= Marks <= 100
  • Метки должны содержать только числа

Мне нужно применить проверки фрейма данных для столбцов, упомянутых в списке, и создать новый фрейм данных со всеми строками, которые не прошли проверку. В этом случае новый фрейм данных будет

ID Names Marks1 Marks2 Marks3
1  A     50     102    87
3  C     5      175    43
4  D     35     75     80
5  E     87     75     B

1 Ответ

1 голос
/ 20 июня 2020

Проверьте код ниже.

scala> df.show(false)
+---+-----+------+------+------+
|id |names|marks1|marks2|marks3|
+---+-----+------+------+------+
|1  |A    |50    |102   |87    |
|2  |B    |54    |75    |83    |
|3  |C    |5     | 175  |43    |
|4  |D    |35    |75    |80    |
|5  |E    |87    |75    |B     |
|6  |F    |93    |75    |83    |
+---+-----+------+------+------+

Условия фильтрации

scala> val colsForCheck = Seq("marks1","marks2","marks3")
.map(c => !(
    col(c).cast("int").isNotNull && 
    col(c) >= 50 && col(c) <= 100)
)
.reduce(_ || _)

Выход

scala> df.filter(colsForCheck).show(false)
+---+-----+------+------+------+
|id |names|marks1|marks2|marks3|
+---+-----+------+------+------+
|1  |A    |50    |102   |87    |
|3  |C    |5     | 175  |43    |
|4  |D    |35    |75    |80    |
|5  |E    |87    |75    |B     |
+---+-----+------+------+------+
...