用 ; 分割数组并在字符串的末尾删除(如果存在)以获取数组
Posted
技术标签:
【中文标题】用 ; 分割数组并在字符串的末尾删除(如果存在)以获取数组【英文标题】:Split an array with ; and deleted at the end ofstring if it exist to get an array 【发布时间】:2021-09-30 09:52:46 【问题描述】:想要基于一个字符串列创建一个新列,该列具有分隔符(“;”),如果存在,则使用 python/pyspark 删除(“;”):
输入:
"511;520;611;"
"322;620"
"3;321;"
"334;344"
预期输出:
+Column | +new column
"511;520;611;" | [511,520,611]
"322;620" | [322,620]
"3;321;" | [3,321]
"334;344" | [334,344]
试试:
data = data.withColumn(
"newcolumn",
split(col("column"), ";"))
但是我在数组的末尾得到一个空字符串,如果存在,我想删除它
+Column | +new column
"511;520;611;" | [511,520,611,empty string]
"322;620" | [322,620]
"3;321;" | [3,321,empty string]
"334;344" | [334;344]
【问题讨论】:
split(col("column").strip(";"), ";")
应该可以解决问题
strip 是一个应用于字符串的 python 函数,我们不能在 pyspark 中的 col("column") 上使用它
哦,真的吗?我不知道它的类型不是str
...
【参考方案1】:
对于 spark 版本 >= 2.4,使用 filter
函数和 != ''
条件过滤掉数组中的空字符串
from pyspark.sql.functions import expr
data = data.withColumn("newcolumn", expr("filter(split(column, ';'), x -> x != '')"))
【讨论】:
以上是关于用 ; 分割数组并在字符串的末尾删除(如果存在)以获取数组的主要内容,如果未能解决你的问题,请参考以下文章