Dataframe 在pyspark中拆分列

Dataframe 在pyspark中拆分列,dataframe,pyspark,split,Dataframe,Pyspark,Split,我试图在pyspark中用一组分隔符拆分一列:“\u”、“-”、“\ 124;”、“\”、“/”等。因此,如果数据帧如下所示: df = spark.createDataFrame([(1, "foo-23.aBD"), (2, "bar12/bg_$"),(3,"iO9_5Gh"),(4,"fg4555(dfd")],["id", "label"] ) 我希望在“标签”列中

我试图在pyspark中用一组分隔符拆分一列:“\u”、“-”、“\ 124;”、“\”、“/”等。因此,如果数据帧如下所示:

df = spark.createDataFrame([(1, "foo-23.aBD"), (2, "bar12/bg_$"),(3,"iO9_5Gh"),(4,"fg4555(dfd")],["id", "label"] )
我希望在“标签”列中有值“foo”、“bar12”、“i09”和“fg4555”。 我可以分别为每个分隔符执行此操作:

from pyspark.sql.functions import regexp_extract, col 

split_col = functions.split(df['label'], '-')
df = df.withColumn('label', split_col.getItem(0))
split_col = functions.split(df['label'], '_')
df = df.withColumn('label', split_col.getItem(0))
split_col = functions.split(df['label'], '/')
df = df.withColumn('label', split_col.getItem(0))

但是看起来不太好。是否有可能以更紧凑的方式进行此操作?提前感谢。

您可能希望在单词边界上进行拆分(
\b
)。不知何故,
\uu
不是单词边界,因此您也需要将其添加到模式列表中

import pyspark.sql.functions as F

df2 = df.withColumn('label', F.split('label', '(\\b|_)')[0])

df2.show()
+---+------+
|id |label |
+---+------+
|1  |foo   |
|2  |bar12 |
|3  |iO9   |
|4  |fg4555|
+---+------+