Spark выдает ошибку при попытке сохранить файл CSV - PullRequest
0 голосов
/ 13 июля 2020

Волшебники сообщества,

Я действительно разочарован. Когда дело доходит до Spark, Had oop и др., Все кажется простым.

В последние часы я пытался найти решение следующей проблемы:

ERROR Executor: Exception in task 0.0 in stage 13.0 (TID 823)
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.createFileWithMode0(Ljava/lang/String;JJJI)Ljava/io/FileDescriptor;

Версии :

  1. ОС: Windows 10
  2. Версия Spark: 2.4.6
  3. Scala версия: 2.11.12
  4. Была oop версия: 2.7.1
  5. Java версия: 1.8.0_202 (64-разрядная)

Переменные :

  1. SPARK_HOME: C: \ Spark
  2. HADOOP_HOME: C: \ Hadoop \ имел oop -2.7.1
  3. SCALA_HOME: C: \ Program Files (x86) \ scala
  4. JRE_HOME: C: \ Program Files \ Java \ jre1.8.0_202
  5. JAVA_HOME: C: \ Program Files \ Java \ jdk1.8.0_202

Пути :

  1. % SPARK_HOME% \ bin
  2. % HADOOP_HOME% \ bin
  3. % SCALA_HOME% \ bin
  4. % JRE_HOME% \ bin
  5. % JAVA_HOME% \ bin

Команда, которая вызывает ошибку:

df.coalesce(1).write.format("csv").save("result")

Папка (результат) кажется, создается, но он пуст.

Я буквально понятия не имею, как решить эту проблему.

Любая помощь будет тепло приветствоваться.

Ответы [ 2 ]

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

Я считаю, что ваш HADOOP_HOME=C:\Hadoop\hadoop-2.7.1 указывает на Had oop Binaries / Libraries, вместо этого вам понадобится инструмент под названием WINUTILS.EXE для работы в Windows.

Вы можете скачать Had oop Версия winutils из git и сопоставьте HADOOP_HOME с Root каталогом Winutils. https://github.com/steveloughran/winutils

Источник:

Из Had oop Confluence: Had oop требует собственных библиотек на Windows для работать должным образом, включая доступ к файловой системе file: //, где Had oop использует некоторые Windows API для реализации разрешений доступа к файлам в стиле posix

https://cwiki.apache.org/confluence/display/HADOOP2/WindowsProblems

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

Кажется, что у вас нет Бинарных файлов oop для Windows, установленных в каталоге HADOOP_HOME. Или может случиться так, что их зависимости (например, Visual C ++ Runtime) отсутствуют.

Вам также может потребоваться загрузить разделяемые библиотеки напрямую, это зависит от способа запуска приложения Spark.

System.load(System.getenv("HADOOP_HOME") + "/lib/hadoop.ddl");
...