为什么火花壳会因"此时出乎意料"而失败?

a37*_*910 6 environment-variables apache-spark

运行spark-shell命令时出现以下错误:

在此输入图像描述

我从http://spark.apache.org/downloads.html下载了spark-2.1.1-bin-hadoop2.7.tgz文件,解压缩tar文件并将文件夹的内容粘贴到c:\ Spark目录中.之后我相应地为spark和jdk配置了环境变量,但是我收到了这个错误.任何帮助将不胜感激.

Jac*_*ski 7

几乎可以肯定你的JAVA_HOME环境变量包含一个中断的空间spark-shell.请将Java重新安装到路径中没有空格的目录中.


您可以在bin/spark-class2.cmd中查看相关的代码段,该代码段在spark-shellWindows下执行(通过bin/spark-submit2.cmd shell脚本):

if "x%1"=="x" (
Run Code Online (Sandbox Code Playgroud)

因此,当spark-class2.cmd替换%1为具有空格(或类似的东西)的路径时,它最终会:

if "x"Files\Java\jdk1.8.0_45""=="x" (
Run Code Online (Sandbox Code Playgroud)

因双引号太多而产生错误.

神秘之处在于如何JAVA_HOME在这个地方结束.我似乎无法找到原因,但这就是我们在这里看到的.

  • 还要检查%SPARK_HOME%...它的路径中不应包含“空格”。 (2认同)

小智 6

我通过使用像“Progra~1”这样的简写来解决这个错误,它是“Program Files (x86)”的简写。

C:\Progra~1\Java\jdk1.8.0_161


vaq*_*han 5

当您的 Java 主页在 Windows 中设置如下时,您会看到此问题

JAVA_HOME=C:\Program Files (x86)\Java\jdk1.8.0_162\bin
Run Code Online (Sandbox Code Playgroud)

这里的问题是“程序文件(x86)”中的空间如果添加双引号将在窗口 10 上不起作用

"C:\Program Files (x86)\Java\jdk1.8.0_162\bin" 
Run Code Online (Sandbox Code Playgroud)

您需要将 Java 复制到外部 Program Files (x86) 然后它应该可以工作

JAVA_HOME=C:\java\jdk1.8.0_171\bin
Run Code Online (Sandbox Code Playgroud)