Подсчет строк в озере данных Azure - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть несколько файлов в озере данных Azure, и мне нужно подсчитать, сколько строк им нужно, чтобы убедиться, что они заполнены.Каков наилучший способ сделать это?

Я использую Python:

from azure.datalake.store import core, lib
adl_creds = lib.auth(tenant_id='fake_value', client_secret='fake_another value', client_id='fake key', resource='https://my_web.azure.net/')
adl = core.AzureDLFileSystem(adl_creds, store_name='fake account')

file_path_in_azure = "my/path/to/file.txt"
if adl.exists(file_path_in_azure) is True:
    # 5 megs 5242880 500megs 524288000 100megs 104857600 1meg 1048576
    counter = 0
    with adl.open(file_path_in_azure, mode="rb", blocksize=5242880) as f:
        # i try to use list comprehension but the memory increase since make a list of 1 [1,1,1,1,1,1,1] and then sums all
        # counter1 = sum(1 for line in f)
        for line in f:
            counter = counter + 1

print(counter)

Это работает, но для файлов размером 1 или 2 гигабайта требуются часы.Разве это не должно быть быстрее?Может быть, есть лучший способ?

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Вы можете попробовать:

for file in adl.walk('path/to/folder'):
    counter += len(adl.cat(file).decode().split('\n'))

Я не уверен, что это на самом деле быстрее, но он использует встроенные модули Unix для получения файла, который может быть быстрее, чем явныйВвод / вывод

РЕДАКТИРОВАТЬ: Одна из ловушек этого метода в том случае, если размеры файлов превышают объем ОЗУ устройства, на котором вы работаете, так как cat явно выбрасывает содержимое в память

0 голосов
/ 26 декабря 2018

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

 adl.put(remote_file, locally)

, а затем посчитать строку за строкой, не помещая весь файл в память, загрузить 500 мг.занимает около 30 секунд и читает 1 миль строки около 4 секунд =)

0 голосов
/ 19 декабря 2018

Вам нужно считать строки?Может быть, этого достаточно, чтобы получить размер файла?У вас есть AzureDLFileSystem.stat для получения размера файла. Если вы знаете, сколько времени занимает средний размер строки, вы можете рассчитать ожидаемое количество строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...