【问题标题】:sparklyr- JAVA_HOME is set but does not point to a valid version.sparklyr- JAVA_HOME 已设置,但未指向有效版本。
【发布时间】:2019-03-20 12:38:55
【问题描述】:

我正在尝试使用 sparklyr 分析 R 中的大型数据集。在尝试与 spark_connect 建立 Spark 连接时,我收到以下错误:

Error in get_java(throws = TRUE) : Java is required to connect to Spark. JAVA_HOME is set but does not point to a valid version. Please fix JAVA_HOME or reinstall from: https://www.java.com/en/

我重新安装了 Java,但仍然出现同样的错误。有什么建议吗?

【问题讨论】:

  • Sys.which("java")(来自 R 控制台)返回什么?
  • java "C:\\PROGRA~2\\COMMON~1\\Oracle\\Java\\javapath\\java.exe"

标签: r apache-spark sparklyr


【解决方案1】:

当我跑步时:

sparklyr:::get_java()
           java 
"/usr/bin/java" 

您似乎没有以这样一种方式设置java,以使sparklyr 函数的响应令人满意。与@Kerie 不同,我从 echo 命令中一无所获。相反,我可以在终端会话中从此命令中获得合理的结果:

$ java -version
#-------------------
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

运行 MacOS 10.11.6(未升级,因为我的硬件在 Apple 看来是“过时的”)和 R 3.5.1。

这里具有讽刺意味的是,如果 get_java 函数找不到环境变量,它似乎应该为该位置设置一个值。代码如下:

sparklyr:::get_java
 #----------
function (throws = FALSE) 
{
    java_home <- Sys.getenv("JAVA_HOME", unset = NA)
    if (!is.na(java_home)) {
        java <- file.path(java_home, "bin", "java")
        if (identical(.Platform$OS.type, "windows")) {
            java <- paste0(java, ".exe")
        }
        if (!file.exists(java)) {
            if (throws) {
                stop("Java is required to connect to Spark. ", 
                  "JAVA_HOME is set but does not point to a valid version. ", 
                  "Please fix JAVA_HOME or reinstall from: ", 
                  java_install_url())
            }
            java <- ""
        }
    }
    else java <- Sys.which("java")
    java
}
<bytecode: 0x7fb5c7f2db30>
<environment: namespace:sparklyr>

因为我没有 JAVA_HOME 的环境变量,但有java 注册到which,所以get_java 函数返回一个有效路径。所以我的系统返回:

Sys.which("java")
           java 
"/usr/bin/java" 

@user6910411 的 cmets 提醒我,您不应更新到当前的 Java Dev Kit(即 1.9),而应使用 @Kerie 提供的链接到之前的主要版本 1.8。您还应该运行:

Sys.unsetenv("JAVA_HOME") 

摆脱误导性的符号链接。或者您可以在/Library/Java/Home(如果它在哪里)找到它并在安装更新(但不是最新)版本之前将其删除。

【讨论】:

  • 我在运行$ java -version 时的输出看起来和你的一样。同样,当我运行sparklyr:::get_java() 时,输出显示为/usr/bin/java。知道我的 Java 可能会有什么不同的设置吗?
  • sparklyr 完全有可能希望找到一个环境变量(尽管能够在 PATH 变量中找到 java 组件。当您在一个配置文件中设置一个时会发生什么?参见:@ 987654335@ 以获得您的选项的完整列表。我建议不要使用您的 bash .profile。环境有时会有所不同。
【解决方案2】:

在终端运行echo $JAVA_HOME,看看输出是什么。

在我的 Mac OS 中,输出是: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home

【讨论】:

  • @Kyle 你是如何安装java的?那是JDK还是JRE?尝试从official download site 下载 JDK。选择jdk-8u181-macosx-x64.dmg,大约242.83 MB。
  • @Kyle。我在/Library/Java/Home 也有一个符号链接,它的日期为 2009 年并指向无效位置。我认为这是早期安装的残余。我目前有/usr/bin/java 的符号链接指向jdk1.8.0_131.jdk 中的代码。我认为您可能需要更新您的 java 安装。
猜你喜欢
  • 2012-12-16
  • 1970-01-01
  • 2015-04-05
  • 2013-05-30
  • 2021-12-10
  • 1970-01-01
  • 2014-08-20
  • 2015-04-30
相关资源
最近更新 更多