writeStream of spark генерирует много маленьких файлов - PullRequest
0 голосов
/ 10 сентября 2018

Я использую Spark Structured Streaming (2.3) для записи данных паркета в контейнеры в облаке (Google Cloud Storage). Я использую следующую функцию:

def writeStreaming(data: DataFrame, format: String, options: Map[String, String], partitions: List[String]): DataStreamWriter[Row] = {
var dataStreamWrite = data.writeStream .format(format).options(options).trigger(Trigger.ProcessingTime("120 seconds"))

if (!partitions.isEmpty)
  dataStreamWrite = ddataStreamWrite.partitionBy(partitions: _*)

dataStreamWrite

}

К сожалению, при таком подходе я получаю много маленьких файлов.

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

1 Ответ

0 голосов
/ 18 января 2019

Причиной того, что у вас много маленьких файлов, несмотря на использование триггера , может быть ваш фрейм данных, имеющий много разделов. Чтобы уменьшить количество паркета до 1 файла / 2 минуты, вы можете объединить в один раздел перед записью файлов паркета.

var dataStreamWrite = data
    .coalesce(1)
    .writeStream 
    .format(format)
    .options(options)
    .trigger(Trigger.ProcessingTime("120 seconds"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...