Как записать вывод в виде отдельного файла в существующий каталог HDFS с помощью Spark? - PullRequest
0 голосов
/ 13 июля 2020

У меня есть вариант использования, когда мне нужно записать вывод как отдельный файл в существующий каталог HDFS. Когда я использую метод sparkContext.saveAsHadoopFile (), возникает исключение, в котором говорится, что выходной каталог уже существует. В настоящее время я могу сделать это с помощью клиентской библиотеки Had oop и запустить ее как задачу Spark, ниже представлен фрагмент кода примера кода. Мне было интересно, можем ли мы выполнить эту работу, используя функции библиотеки Spark?

Код с использованием стандартной клиентской библиотеки Had oop.

val hdfs = FileSystem.get(getHDFSConfiguration(hadoopConf))
val outputFile = new Path(newPath)

hdfs.createNewFile(outputFile)

hdfs.append(outputFile)
      .writeBytes(content)

Версия Spark: 2.3.x

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Если вы используете Had oop с версией> 0.20.0, вы можете установить это свойство на своем hdfs-сайте. xml

<property>
   <name>dfs.support.append</name>
   <value>true</value>
</property>

, а затем вы можете использовать .append файловой системы , чтобы добавить данные в существующий путь к данным.

0 голосов
/ 13 июля 2020

Один из способов - создать фрейм данных и сохранить его данные в файл как

df.write.mode("append").csv("pathToFile")

Имейте в виду, что если вы не установите coalesce на 1, вы получите несколько файлов вместо одного. отдельный файл. Для этого вам нужно

df.coalesce(1).write.mode("append").csv("pathToFile")

Я предполагаю, что вы хотите сохранить данные как csv, но есть и другие форматы, такие как parquet, avro или c, et c. которые в некоторых аспектах более эффективны, чем csv

...