Чтение файлов и изменение имени файла из контейнеров хранилища Azure в Azure Databricks

Я загружаю большой файл XML и генерирую отдельный JSON в соответствии с элементом XML, я использую SPARK-XML в лазурных блоках данных. Код для создания файла json как

commercialInfo
.write
.mode(SaveMode.Overwrite)
.json("/mnt/processed/" + "commercialInfo")

Я могу извлечь узел элемента XML и записать его в контейнер хранилища Azure. В контейнере создается папка, и внутри папки у нас есть имя с guid, а не с именем файла.

введите здесь описание изображения

Может ли кто-нибудь предложить, можем ли мы контролировать имя файла, созданное в контейнере, то есть часть-0000 в какое-то значимое имя, чтобы его можно было прочитать с помощью какого-либо триггера Azure Blob.


person Supriya Bhattacherjee    schedule 13.10.2020    source источник


Ответы (1)


К сожалению, невозможно управлять именем файла с помощью стандартной библиотеки spark, но вы можете использовать Hadoop API для управления файловой системой — сохраните вывод во временном каталоге, а затем переместите файл по запрошенному пути.

Spark использует формат файлов Hadoop, который требует секционирования данных, поэтому у вас есть part-0000 файлов.

Чтобы изменить имя файла, попробуйте добавить что-то вроде этого в свой код:

В Scala это будет выглядеть так:

import org.apache.hadoop.fs._
val fs = FileSystem.get(sc.hadoopConfiguration)
val file = fs.globStatus(new Path("path/file.csv/part*"))(0).getPath().getName()

fs.rename(new Path("csvDirectory/" + file), new Path("mydata.csv"))
fs.delete(new Path("mydata.csv-temp"), true)

OR

import org.apache.hadoop.fs._
val fs = FileSystem.get(sc.hadoopConfiguration)
fs.rename(new Path("csvDirectory/data.csv/part-0000"), new Path("csvDirectory/newData.csv"))
person CHEEKATLAPRADEEP-MSFT    schedule 13.10.2020