Очистить значения столбцов в фрейме данных 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|
+----+----------+
Другие вопросы по тегам