У меня есть PySpark Dataframe со столбцом StringType (), который состоит в основном из 15 символов. Тем не менее, некоторые строки имеют 11 символов. Пример:
df =
+--------------+--------+
| code|state|
+--------------+--------+
|'334445532234553'|wa |
|'332452132234553'|mn |
|'45532234553' |fl |
|'679645532234553'|mo |
|'918535532234553'|ar |
|'174925532234553'|wi |
|'45532234553' |al |
|'928405532234553'|ca |
+--------------+--------+
Мне нужно, чтобы во всех строках было по 11 символов, а последние 4 символа были удалены из любой строки, содержащей 15 символов. Так что это мой желаемый вывод:
df.show(8) =
+-------------+-----+
| code|state|
+-------------+-----+
|'33444553223'|wa |
|'33245213223'|mn |
|'45532234553'|fl |
|'67964553223'|mo |
|'91853553223'|ar |
|'17492553223'|wi |
|'45532234553'|al |
|'92840553223'|ca |
+-------------+-----+
Пока у меня есть это преобразование, которое удаляет последние 4 символа из ВСЕХ строк в моем столбце под названием 'code':
from pyspark.sql.functions import substring, length, col, expr
df = df.withColumn("code",expr("substring(code, 1, length(code)-4)"))
Так что мне нужно что-то сделать, чтобы сделать это условным для длины строки в строке.
РЕДАКТИРОВАТЬ С помощью @gmds я нашел это решение:
df.withColumn("code",expr("substring(code, 1, 11)"))