Все сводится к использованию.Существует два варианта: есть ли логический идентификатор в моих данных, который будет постоянно использоваться для поиска, или я просто беспокоюсь об эффективности файлов.
(1) Логический идентификатор, если ваши данные имеют столбец (столбцы), которые используются последовательно (т. Е. Время транзакции или время ввода), вы можете разделить эти строки, это позволит вашему процессу быстро проанализироватьданные, позволяющие быстрее запросить время.Недостатком разбиения является то, что переход через 2K, как известно, нарушает такие технологии, как Impala, поэтому не стоит слишком сходить с ума.
(2) Разбиение по размеру, если вы просто оптимизируете размер файла для перемещения по среде и другим сервисам / инструментам.Я бы посоветовал попытаться установить размер данных 128 МБ на раздел.Это позволит быстрее перемещаться по другому инструменту, у которого могут возникнуть проблемы при обработке серии небольших файлов (например, AWS S3).Ниже приведен некоторый код для установки разделов на основе размера данных.
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
import org.apache.spark.sql.DataFrame
import org.apache.spark.util.SizeEstimator
val inputDF2 : Long = SizeEstimator.estimate(inputDF.rdd)
//find its appropiate number of partitions
val numPartitions : Long = (inputDF2/134217728) + 1
//write it out with that many partitions
val outputDF = inputDF.repartition(numPartitions.toInt)
Не зная ваших данных, я не могу сказать вам, будет ли лучше разделить их по логическому идентификатору, размеру байта или комбинации обоих,Я надеюсь, что дал вам достаточно информации, чтобы помочь вам понять, что вы хотите сделать.