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

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

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

  1. ADCSSDKGF
  2. ACD-DDB-RDC-4535
  3. ADD-CDP-2131
  4. DFK-KRD-EEF-CRK-NMC-2342

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

  1. ADCSSDKGF
  2. ACD-DDB-RDC
  3. ADD-CDP
  4. DFK-KRD-EEF-CRK-NMC

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

xghobddn

xghobddn1#

检查以下代码。

  1. scala> df.show(false)
  2. +------------------------+
  3. |value |
  4. +------------------------+
  5. |ACD-DDB-RDC-4535 |
  6. |ADD-CDP-2131 |
  7. |DFK-KRD-EEF-CRK-NMC-2342|
  8. +------------------------+
  9. scala> val mkString = udf((value: Seq[String]) => if(value.length > 1) value.init.mkString("-") else value.mkString("-"))
  10. mkString: org.apache.spark.sql.expressions.UserDefinedFunction = UserDefinedFunction(<function1>,StringType,Some(List(ArrayType(StringType,true))))
  11. scala> df
  12. .withColumn("data",split($"value","-"))
  13. .select(mkString($"data").as("data"))
  14. .show(false)
  15. +-------------------+
  16. |data |
  17. +-------------------+
  18. |ACD-DDB-RDC |
  19. |ADD-CDP |
  20. |DFK-KRD-EEF-CRK-NMC|
  21. +-------------------+
展开查看全部

相关问题