Как я могу добавить в тот же файл в HDFS (спарк 2.11) - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь сохранить потоковые данные в HDFS с помощью SparkStreaming, но он продолжает создавать в новый файл вместо добавления в один файл или несколько файлов

Если он продолжит создавать n номеров файлов, я чувствую, что это будет не очень эффективно

СИСТЕМА ФАЙЛОВ HDFS enter image description here

Код

lines.foreachRDD(f => {
  if (!f.isEmpty()) {
    val df = f.toDF().coalesce(1)
    df.write.mode(SaveMode.Append).json("hdfs://localhost:9000/MT9")
  }
 })

В моем pom я использую соответствующие зависимости:

  • spark-core_2.11
  • spark-sql_2.11
  • spark-streaming_2.11
  • spark-streaming-kafka-0-10_2.11

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Он создает файл для каждого rdd, так как каждый раз при повторной инициализации переменной DataFrame.Я бы предложил иметь переменную DataFrame и присваивать ей значение null вне цикла и внутри каждого объединения rdd с локальным DataFrame.После цикла запись выполняется с использованием внешнего DataFrame.

0 голосов
/ 25 июня 2018

Как вы уже поняли, Append в Spark означает запись в существующий каталог, а не добавление в файл.

Это преднамеренное и желаемое поведение (подумайте, что произойдет, если процесс потерпит неудачу в середине«добавления», даже если формат и файловая система это позволяют).

Такие операции, как слияние файлов, должны применяться отдельным процессом, если это вообще необходимо, что обеспечивает корректность и отказоустойчивость.К сожалению, для этого требуется полная копия, которая по понятным причинам нежелательна для каждой партии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...