Как эффективно читать метаданные файлов озера данных

Я хочу прочитать дату и время последнего изменения файлов в озере данных в сценарии databricks. Если бы я мог эффективно читать его как столбец при чтении данных из озера данных, это было бы идеально.
Спасибо :)

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


person Crow59    schedule 16.06.2021    source источник
comment
поможет ли это stackoverflow.com/questions/61317600/?   -  person Srinivas    schedule 16.06.2021
comment
@Srinivas Спасибо за ваш комментарий. Я ограничен использованием pyspark, а dbutils.fs.ls, который выдает некоторые метаданные о файлах, не содержит последнего измененного datetime, только размер файла и путь. Вы случайно не знаете, как я могу воспроизвести вашу логику в pyspark?   -  person Crow59    schedule 16.06.2021
comment
см. связанный ответ   -  person Alex Ott    schedule 17.06.2021


Ответы (2)


Мы можем получить эти данные с помощью кода Python, поскольку у нас нет прямого метода для получения измененного времени и даты файлов в озере данных.

Вот код

from pyspark.sql.functions import col
from azure.storage.blob import BlockBlobService
from datetime import datetime
import os.path

block_blob_service = BlockBlobService(account_name='account-name', account_key='account-key')
container_name ='container-firstname'
second_conatainer_name ='container-Second'
#block_blob_service.create_container(container_name)
generator = block_blob_service.list_blobs(container_name,prefix="Recovery/")
report_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')


for blob in generator:
    length = BlockBlobService.get_blob_properties(block_blob_service,container_name,blob.name).properties.content_length
    last_modified = BlockBlobService.get_blob_properties(block_blob_service,container_name,blob.name).properties.last_modified
    file_size = BlockBlobService.get_blob_properties(block_blob_service,container_name,blob.name).properties.content_length
    line = container_name+'|'+second_conatainer_name+'|'+blob.name+'|'+ str(file_size) +'|'+str(last_modified)+'|'+str(report_time)
    print(line)

Дополнительные сведения см. В SO, в котором рассматривается аналогичная проблема.

person SaiSakethGuduru-MT    schedule 17.06.2021

Что касается проблемы, обратитесь к следующему коду

URI = sc._gateway.jvm.java.net.URI
Path = sc._gateway.jvm.org.apache.hadoop.fs.Path
FileSystem = sc._gateway.jvm.org.apache.hadoop.fs.FileSystem
conf = sc._jsc.hadoopConfiguration()

conf.set(
  "fs.azure.account.key.<account-name>.dfs.core.windows.net",
  "<account-access-key>")

fs = Path('abfss://<container-name>@<account-name>.dfs.core.windows.net/<file-path>/').getFileSystem(sc._jsc.hadoopConfiguration())

status=fs.listStatus(Path('abfss://<container-name>@<account-name>.dfs.core.windows.net/<file-path>/'))

for i in status:
  print(i)
  print(i.getModificationTime())

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

person Jim Xu    schedule 17.06.2021