Проверьте, содержат ли значения в столбце значения, отличные от алфавитов или пробелов - PullRequest
1 голос
/ 21 июня 2020

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

ID Name
1  Ajay
2  John Doe
3  Mark2
4  Clint!
5  Username@33

В столбце имени должны быть только буквы или пробелы. Мне нужно отфильтровать те строки, которые удовлетворяют условию

Итак, результаты должны быть

ID Name
3  Mark2
4  Clint!
5  Username@33

Ответы [ 2 ]

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

Вместо udf вы можете использовать .rlike встроенную функцию искры для этого случая.

[^a-zA-Z\\s+]+ -> сопоставить все символы, которые не дюйм a-z and space

Example:

import org.apache.spark.sql.functions._
df.filter(col("Name").rlike("[^a-zA-Z\\s+]+")).show()
//+---+-----------+
//| ID|       Name|
//+---+-----------+
//|  3|      Mark2|
//|  4|     Clint!|
//|  5|Username@33|
//+---+-----------+
0 голосов
/ 21 июня 2020

У меня работают следующие

val allowed = (('a' to 'z') ++ ('A' to 'Z')).toSet
val allowedNew = allowed + ' '
def isOrdinary(s: String) = s.forall(allowedNew.contains)
def filUDF = udf[Boolean, String](isOrdinary)
df.filter(!filUDF($"Name")).show()
...