У меня есть pyspark dataframe
с некоторыми данными, и я хочу substring
некоторые данные столбца, этот столбец также содержит некоторое значение null
. вот мой фрейм данных
+-------------+
| Name|
+--------------+
| Asia201909284|
| US20190928|
|Europ201909287|
| null|
| something|
| nothing|
+--------------+
все, что я хочу удалить Asia, US, Europ
из столбца Name
Вот мой код, который я уже пробовал.
fun_asia = udf(lambda x: x[4:len(x)])
fun_us = udf(lambda x: x[2:len(x)])
fun_europ = udf(lambda x: x[5:len(x)])
df1.withColumn("replace", \
when(df1.Name.isNull(),df1.Name)\
.when(df1.Name.like("Asia%"),fun_asia(col('Name')))\
.when(df1.Name.like("US%"),fun_us(col('Name')))\
.when(df1.Name.like("Europ%"),fun_europ(col('Name')))
.otherwise(df1.Name)
).show()
Работает нормально, если в этом столбце нет значения null
. но если есть какое-то значение null
, оно выдает ошибку, такую как len()
не может вычислить нулевое значение.
Ошибка массажа
TypeError: object of type 'NoneType' has no len()
Вещи, которые я запутал, почемуэто вызывает удовольствие также для null
значение. и как я могу преодолеть свою проблему и получить желаемый результат, любую помощь, оцените.
Фактический результат, который я хочу
+--------------+---------+
| Name| replace|
+--------------+---------+
| Asia201909284|201909284|
| US20190928| 20190928|
|Europ201909287|201909287|
| null| null|
| something|something|
| nothing| nothing|
+--------------+---------+