拆分pyspark中的列
Posted
技术标签:
【中文标题】拆分pyspark中的列【英文标题】:Split the column in pyspark 【发布时间】:2021-05-01 07:32:13 【问题描述】:我试图在一堆分隔符上拆分 pyspark 中的一列:“_”、“-”、“|”、“\”、“/”等。所以如果数据框如下:
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))
但它看起来不太好。有没有可能以更紧凑的方式做到这一点?提前致谢。
【问题讨论】:
【参考方案1】:您可能希望在单词边界上进行拆分 (\b
)。不知何故,_
不是单词边界,因此您也需要将其添加到模式列表中。
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|
+---+------+
【讨论】:
以上是关于拆分pyspark中的列的主要内容,如果未能解决你的问题,请参考以下文章