Spark 在尝试保存 CSV 文件时抛出错误
Posted
技术标签:
【中文标题】Spark 在尝试保存 CSV 文件时抛出错误【英文标题】:Spark throws error when trying to save a CSV file 【发布时间】:2020-07-13 15:10:37 【问题描述】:社区向导,
我真的很沮丧。谈到 Spark、Hadoop 等,似乎没有什么是直截了当的。
在过去的几个小时里,我试图找到以下问题的解决方案:
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;
版本:
-
操作系统:Windows 10
Spark 版本:2.4.6
Scala 版本:2.11.12
Hadoop 版本:2.7.1
Java 版本:1.8.0_202(64 位)
变量:
-
SPARK_HOME:C:\Spark
HADOOP_HOME: C:\Hadoop\hadoop-2.7.1
SCALA_HOME:C:\Program Files (x86)\scala
JRE_HOME:C:\Program Files\Java\jre1.8.0_202
JAVA_HOME: C:\Program Files\Java\jdk1.8.0_202
路径:
-
%SPARK_HOME%\bin
%HADOOP_HOME%\bin
%SCALA_HOME%\bin
%JRE_HOME%\bin
%JAVA_HOME%\bin
引发错误的命令是:
df.coalesce(1).write.format("csv").save("result")
文件夹(结果)似乎已创建,但它是空的。
我真的不知道如何解决这个问题。
热烈欢迎任何帮助。
【问题讨论】:
以下帖子可能对您有所帮助,***.com/questions/50344874/… 【参考方案1】:我相信您的 HADOOP_HOME=C:\Hadoop\hadoop-2.7.1
指向 Hadoop 二进制文件/库,相反,您应该需要一个名为 WINUTILS.EXE
的工具才能在 Windows 中工作。
您可以从 git 下载 Hadoop 版本的 winutils 并将 HADOOP_HOME 映射到 Winutils 的根目录。 https://github.com/steveloughran/winutils
来源:
来自 Hadoop 的 Confluence: Hadoop 需要 Windows 上的本地库才能正常工作——包括访问 file:// 文件系统,其中 Hadoop 使用一些 Windows API 来实现类似 posix 的文件访问权限
https://cwiki.apache.org/confluence/display/HADOOP2/WindowsProblems
【讨论】:
我已经在C:\Hadoop\hadoop-2.7.1\bin
中拥有了winutils.exe
。我拿了这个bin 文件夹并将其替换为我已经拥有的文件夹,并且它有效。似乎winutils.exe
不是真正的问题,但其他一些事情肯定是。感谢您的回答!【参考方案2】:
您似乎没有在HADOOP_HOME
目录中安装适用于Windows 的Hadoop binaries。
也可能是缺少它们的依赖项(例如 Visual C++ Runtime)。
您可能还需要直接加载共享库,这取决于您启动 Spark 应用程序的方式。
System.load(System.getenv("HADOOP_HOME") + "/lib/hadoop.ddl");
【讨论】:
以上是关于Spark 在尝试保存 CSV 文件时抛出错误的主要内容,如果未能解决你的问题,请参考以下文章
在 Spark 中使用 partitionBy 保存 CSV 文件 [重复]