У меня есть большой набор данных в формате паркета (размером ~ 1 ТБ), который разделен на 2 иерархии: CLASS
и DATE
. Всего 7 классов. Но с 01.01.2020 Дата постоянно увеличивается. Мои данные сначала разделяются на CLASS
, а затем на DATE
Так что-то вроде:
CLASS1---DATE 1
---DATE 2
--- .
--- .
--- .
---DATE N
CLASS2---DATE 1
---DATE 2
--- .
--- .
--- .
---DATE N
Я загружаю свои данные CLASS
в цикле for. Если я загружаю весь паркетный файл, YARN завершает работу, поскольку перегружает экземпляры памяти. Но я загружаю все дни, так как я выполняю расчет процентилей в своем моделировании. Этот метод занимает около 23 часов.
Однако, если я переразбиваю так, что у меня есть только раздел CLASS
, работа занимает около 10 часов. Слишком большое количество подразделов замедляет работу искрового исполнителя? Я сохраняю иерархию разделов как CLASS
- ›DATE
только потому, что мне нужно добавлять новые данные до DATE
каждый день. Если иметь только 1 раздел более эффективно, то после загрузки новых данных мне пришлось бы перераспределять только раздел CLASS
каждый день. Может ли кто-нибудь объяснить, почему один раздел работает быстрее? И если да, то как лучше всего ежедневно разбивать данные путем добавления и без повторного разбиения всего набора данных?
Спасибо
РЕДАКТИРОВАТЬ: Я использую цикл for в файловой структуре для выполнения цикла по разделам CLASS
следующим образом:
fs = s3fs.S3FileSystem(anon=False)
inpath="s3://bucket/file.parquet/"
Dirs= fs.ls(inpath)
for paths in Dirs:
customPath='s3://' + uvapath + '/'
class=uvapath.split('=')[1]
df=spark.read.parquet(customPath)
outpath="s3://bucket/Output_" + class + ".parquet"
#Perform calculations
df.write.mode('overwrite').parquet(outpath)
В загруженном df
будут все даты на CLASS=1
. Затем я вывожу файл в виде отдельных паркетных файлов для каждого CLASS
, так что у меня есть 7 паркетных файлов:
Output_1.parquet
Output_2.parquet
Output_3.parquet
Output_4.parquet
Output_5.parquet
Output_6.parquet
Output_7.parquet
Затем я объединяю 7 паркетов в один паркет, это не проблема, так как полученные паркетные файлы намного меньше.
CLASS=1/DATE=2020-01-01
? Тогда это будет тяжело. - person Lamanus   schedule 25.09.2020CLASS=1
- person thentangler   schedule 25.09.2020