gpt4 book ai didi

scala - Spark : udf to get dirname from path

转载 作者:行者123 更新时间:2023-12-02 06:47:17 25 4
gpt4 key购买 nike

我有大量的路径列需要拆分为 2 列,basename 和 dirname。我知道如何使用以下方法轻松获取路径的基本名称:

val df = Seq("/test/coucou/jambon/hello/file"
,"/test/jambon/test")
.toDF("column1")
df.withColumn("basename", substring_index($"column1" , "/", -1))
.show(2, false)
+------------------------------+---------+
|column1 |basename |
+------------------------------+---------+
|/test/coucou/jambon/hello/file|file |
|/test/jambon/test |test |
+------------------------------+---------+

但是我正在努力获得这样的目录名:

+------------------------------+--------------------------+
|column1 |dirname |
+------------------------------+--------------------------+
|/test/coucou/jambon/hello/file|/test/coucou/jambon/hello |
|/test/jambon/test |/test/jambon |
+------------------------------+--------------------------+

我已经尝试了各种解决方案,但是我无法找到一个功能性的柱状解决方案。
我最好的想法是将 $"basename" 减去 $"column1",但是我找不到在 Spark 中减去 String 的方法。

最佳答案

您可以使用 expr 对 column1 进行子字符串化。代码应如下所示。希望对您有所帮助。

//Creating Test Data
val df = Seq("/test/coucou/jambon/hello/file"
,"/test/jambon/prout/test")
.toDF("column1")

val test = df.withColumn("basename", substring_index($"column1" , "/", -1))
.withColumn("path", expr("substring(column1, 1, length(column1)-length(basename)-1)"))

test.show(false)
+------------------------------+--------+-------------------------+
|column1 |basename|path |
+------------------------------+--------+-------------------------+
|/test/coucou/jambon/hello/file|file |/test/coucou/jambon/hello|
|/test/jambon/prout/test |test |/test/jambon/prout |
+------------------------------+--------+-------------------------+

关于scala - Spark : udf to get dirname from path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55491813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com