用 ; 分割数组并在字符串的末尾删除(如果存在)以获取数组

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 != '')"))

【讨论】:

以上是关于用 ; 分割数组并在字符串的末尾删除(如果存在)以获取数组的主要内容,如果未能解决你的问题,请参考以下文章

js数组对象操作

C++如何将一个字符数组分割成几个数组?

c语言 讲一个字符串str以空格为分割,分割后输出到一个一维数组

字符串165. 比较版本号

循环并在末尾删除逗号

MySQL中数组的存储