拆分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中的列的主要内容,如果未能解决你的问题,请参考以下文章

将列表的列拆分为同一 PySpark 数据框中的多列

如何将包含多个键值对的列拆分为pyspark中的不同列

Pyspark - 如何拆分具有 Datetime 类型的结构值的列?

如何将向量拆分为列 - 使用 PySpark

拆分特定的 PySpark df 列并创建另一个 DF

Pyspark 数据帧拆分并将分隔列值填充到 N 索引数组中