Python Эквивалент для приведенного выше кода:
df.withColumn('d',f.split(f.regexp_replace(f.concat_ws(',',f.array_except(f.split('data',' '),f.split(f.regexp_replace('data','(size_\d+)',''),' ')))
,"[^0-9$,]",""),',')).show(20,False)
Если ваш набор данных не такой большой, вы также можете сделать это с udf
import re
from pyspark.sql.functions import udf
extract = udf(lambda s: list(map(lambda x: x.split('_')[1] if len(x)>0 else x,re.findall(r'(size_\d+)', s))), ArrayType(StringType()))
df.withColumn('values', extract('data')).show()
вывод в обоих случаях
+--------------------+---------+
| data| values|
+--------------------+---------+
|The size availabl...|[10, 100]|
|The size availabl...| [10]|
| | []|
|The size availabl...| [20]|
| size_10| [10]|
+--------------------+---------+