У меня есть фрейм данных pyspark, который выглядит следующим образом:
df:
+----+--------------------+
| ID| Email|
+----+--------------------+
|2345| sample@example.org|
|2398| sample2@example.org|
|2328| sampleexample.org|
|3983| sample@exampleorg|
+----+--------------------+
Я хочу применить регулярное выражение к указанному выше фрейму данных (столбец электронной почты) и добавить новый столбец на основе результатов соответствия (True илиЛожь). Мое регулярное выражение выглядит так:
regex = '^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$'
В основном проверяю, является ли это действительное письмо или нет. И желаемый результат:
df2:
+----+--------------------+--------+
| ID| Email| Matched|
+----+--------------------+--------+
|2345| sample@example.org| True|
|2398| sample2@example.org| True|
|2328| sampleexample.org| False|
|3983| sample@exampleorg| False|
+----+--------------------+--------+
Я знаю только о кадре данных filter
, который удалит те, которые не соответствуют шаблону и не являются желаемым результатом. Я также подумал об использовании этого регулярного выражения в качестве функции и применил его к столбцу электронной почты и сделал что-то вроде следующего:
def check(email):
if(re.search(regex, email)):
return True
else:
return False
udf_check_email = udf(check, BooleanType())
df.withColumn('matched', udf_check_email(df.email)).show()
Но я не уверен, является ли это наиболее эффективным способом сделать это. Есть предложения?