Разделение имени файла - PullRequest
0 голосов
/ 30 марта 2020

Доброе утро, ребята,

У меня есть следующий фрейм данных

+--------------+--------------------------------------------------------------------------+
|co_tipo_arquiv|filename                                                |count_tipo_arquiv|
+--------------+--------------------------------------------------------+-----------------+
|05            |hdfs://spbrhdpdev1.br.experian.local:8020/files/files_01|2                |
|01            |hdfs://spbrhdpdev1.br.experian.local:8020/files/files_02|2                |
+--------------+--------------------------------------------------------+-----------------+

Я бы хотел получить только имя файла в столбце имени файла, получая таким образом

+--------------+--------------------------------------------------------------------------+
|co_tipo_arquiv|filename                                                |count_tipo_arquiv|
+--------------+--------------------------------------------------------+-----------------+
|05            |files_01                                                |2                |
|01            |files_02                                                |2                |
+--------------+--------------------------------------------------------+-----------------+

Я думал о разделении, но не знаю, как получить последнее значение

split(col("filename"), "/")

, но .last не работает

+--------------+-------------------------------------------------------------+
|co_tipo_arquiv|filename                                                     |
+--------------+-------------------------------------------------------------+    
|05            |[hdfs:, , spbrhdpdev1.br.experian.local:8020,files, files_01]|
|01            |[hdfs:, , spbrhdpdev1.br.experian.local:8020,files, files_02]|
+--------------+-------------------------------------------------------------+

1 Ответ

1 голос
/ 30 марта 2020

С Spark-2.4+:

Мы можем использовать функцию element_at, чтобы получить последний индекс массива.

1.Using element_at function:

df.withColumn("filename",element_at(split(col("filename"),"/"),-1)).show()
//+--------------+--------+-----------------+
//|co_tipo_arquiv|filename|count_tipo_arquiv|
//+--------------+--------+-----------------+
//|            05|files_01|                2|
//|            01|files_02|                2|
//+--------------+--------+-----------------+ 

Для Spark < 2.4:

2.Using substring_index function:

df.withColumn("filename",substring_index(col("filename"),"/",-1)).show()
//+--------------+--------+-----------------+
//|co_tipo_arquiv|filename|count_tipo_arquiv|
//+--------------+--------+-----------------+
//|            05|files_01|                2|
//|            01|files_02|                2|
//+--------------+--------+-----------------+

3.Using regexp_extract function:

df.withColumn("filename",regexp_extract(col("filename"),"([^\\/]+$)",1)).show()
//+--------------+--------+-----------------+
//|co_tipo_arquiv|filename|count_tipo_arquiv|
//+--------------+--------+-----------------+
//|            05|files_01|                2|
//|            01|files_02|                2|
//+--------------+--------+-----------------+
...