У меня есть большое количество файлов (~ 500k hdf5) внутри ведра s3, который мне нужно обрабатывать и повторно загружать в другой ведро s3.загружать, обрабатывать, загружать большое количество файлов s3 с искру
Я довольно новичок в таких задачах, поэтому я не совсем уверен, что мой подход здесь правильный. Я делаю следующее: Я использую бото, чтобы получить список ключей внутри ковша и распараллелить его с искрой:
s3keys = bucket.list()
data = sc.parallelize(s3keys)
data = data.map(lambda x: download_process_upload(x))
result = data.collect()
где download_process_upload
является функцией, которая загружает файл, указанный с помощью ключа, делает некоторую обработку на нем и повторно добавления его в другое ведро (возвращение 1, если все прошло успешно, и 0, если произошла ошибка) Таким образом, в конце концов, я мог бы сделать
success_rate = sum(result)/float(len(s3keys))
Я прочитал эту искру map
заявления должны быть лицами без гражданства, в то время как моя пользовательская функция карты определенно не является апатридом. Он загружает файл на диск, а затем загружает его в память и т. Д.
Так это правильный способ выполнить такую задачу?