Альтернативный подход к уже предоставленному решению с использованием регулярного выражения
Получите правильное регулярное выражение. regexp_extract UDF даст вам то, что вы хотели.
val df = Seq("/test/coucou/jambon/hello/file"
, "/test/jambon/prout/test")
.toDF("column1")
import org.apache.spark.sql.functions.regexp_extract
df.withColumn("path", regexp_extract('column1, "^\\/(\\w+\\/)+", 0)).withColumn("fileName",regexp_extract('column1, "\\w+$", 0)).show(false)
Вывод
+------------------------------+--------------------------+--------+
|column1 |path |fileName|
+------------------------------+--------------------------+--------+
|/test/coucou/jambon/hello/file|/test/coucou/jambon/hello/|file |
|/test/jambon/prout/test |/test/jambon/prout/ |test |
+------------------------------+--------------------------+--------+
Редактировать:
Без косой черты с регулярным выражением проще управлять:
df.withColumn("path",regexp_extract($"column1", "^(.+)(/.+)$", 1 ) ) )