Очистить значения столбцов в фрейме данных pyspark
Учитывая файл CSV, я преобразовал в Dataframe, используя код, подобный следующему.
raw_df = spark.read.csv(input_data, header=True)
Это создает dataframe выглядит примерно так:
| Name |
========
| 23 |
| hi2 |
| me3 |
| do |
Я хочу преобразовать этот столбец, чтобы он содержал только цифры. Конечный результат должен быть где hi
а также me
удалены:
| Name |
========
| 23 |
| 2 |
| 3 |
| do |
Я хочу очистить значения и убедиться, что они содержат только число. Но я не уверен, возможно ли это в Spark.
2 ответа
Решение
Да, это возможно. Вы можете использовать regex_replace из функции.
Пожалуйста, проверьте это:
import pyspark.sql.functions as f
df = spark.sparkContext.parallelize([('12',), ('hi2',), ('me3',)]).toDF(["name"])
df.show()
+----+
|name|
+----+
| 12|
| hi2|
| me3|
+----+
final_df = df.withColumn('sanitize', f.regexp_replace('name', '[a-zA-Z]', ''))
final_df.show()
+----+--------+
|name|sanitize|
+----+--------+
| 12| 12|
| hi2| 2|
| me3| 3|
+----+--------+
final_df.withColumn('len', f.length('sanitize')).show()
+----+--------+---+
|name|sanitize|len|
+----+--------+---+
| 12| 12| 2|
| hi2| 2| 1|
| me3| 3| 1|
+----+--------+---+
Вы можете настроить регулярное выражение.
В противном случае делать то же самое. Это просто другой способ, но лучше использовать встроенные функции искры, если они доступны. как показано выше также.
from pyspark.sql.functions import udf
import re
user_func = udf (lambda x: re.findall("\d+", x)[0])
newdf = df.withColumn('new_column',user_func(df.Name))
>>> newdf.show()
+----+----------+
|Name|new_column|
+----+----------+
| 23| 23|
| hi2| 2|
| me3| 3|
+----+----------+