如何获得基于长度和分隔符的子字符串“-”

des4xlb0  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(325)

我想得到基于“-”的子串,比如
例如:数据框中的一列

ADCSSDKGF
ACD-DDB-RDC-4535
ADD-CDP-2131
DFK-KRD-EEF-CRK-NMC-2342

我正在尝试更新相同的列,例如

ADCSSDKGF
ACD-DDB-RDC
ADD-CDP
DFK-KRD-EEF-CRK-NMC

选择字符串直到最后一个“-”
到目前为止我想到了
df.withcolumn(“promo\u code”,split(col(“promo\u code”),“-”).getitem(0))
但这只是返回给我的第一个元素,我想附加的项目,直到长度-1,但我认为这不会是有效的,有人能提供更好的方法吗?

xghobddn

xghobddn1#

检查以下代码。

scala> df.show(false)
+------------------------+
|value                   |
+------------------------+
|ACD-DDB-RDC-4535        |
|ADD-CDP-2131            |
|DFK-KRD-EEF-CRK-NMC-2342|
+------------------------+

scala> val mkString = udf((value: Seq[String]) => if(value.length > 1) value.init.mkString("-") else value.mkString("-"))
mkString: org.apache.spark.sql.expressions.UserDefinedFunction = UserDefinedFunction(<function1>,StringType,Some(List(ArrayType(StringType,true))))

scala> df
.withColumn("data",split($"value","-"))
.select(mkString($"data").as("data"))
.show(false)

+-------------------+
|data               |
+-------------------+
|ACD-DDB-RDC        |
|ADD-CDP            |
|DFK-KRD-EEF-CRK-NMC|
+-------------------+

相关问题