Как правило, вы вызываете repartition
с теми же столбцами, что и partitionBy
, чтобы иметь один файл паркета в каждом разделе. Это достигается здесь. Теперь вы можете утверждать, что это может означать, что размер файла паркета становится больше или хуже может вызвать переполнение памяти.
Эта проблема обычно решается добавлением row_number в Dataframe, а затем указанием количества документов, которое может иметь каждый файл паркета. Что-то вроде
val repartitionExpression =colNames.map(col) :+ floor(col(RowNumber) / docsPerPartition)
// now use this to repartition
Чтобы ответить на следующую часть как persist after partitionBy
, которая здесь не нужна, так как после раздела она напрямую записывается на диск.