我有一个名为标签的字段。它包含一个或多个以size_开头的值。
图案为size_
例如 :
+---------------------------------------------+
| tags |
+---------------------------------------------+
|The size available are size_10 and size_100. |
| |
|The size available are size_10 |
|The size available are size_20 |
我想将值单独提取为数组(即)
+----------------------------------------------------------+
| tags |size |
+----------------------------------------------------------+
|The size available are size_10 and size_100. |[10, 20] |
| | [] |
|The size available are size_10 | [10] |
|The size available are size_20 | [20] |
你能帮我解决...
上面代码的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]|
+--------------------+---------+
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句