【问题标题】:Apache-Spark error on python : java.lang.reflect.InaccessibleObjectExceptionpython 上的 Apache-Spark 错误:java.lang.reflect.InaccessibleObjectException
【发布时间】:2017-11-07 21:40:53
【问题描述】:

这是我第一次将 Apache-Spark 与 python (pyspark) 一起使用,我试图运行 Quick Start Examples,但是当我运行该行时说:

>>> textFile = spark.read.text("README.md")

它给了我以下错误(我只粘贴第一部分,因为我认为它是最重要的):

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/daniele/Scaricati/spark/python/pyspark/sql/readwriter.py", line 311, in text
    return self._df(self._jreader.text(self._spark._sc._jvm.PythonUtils.toSeq(paths)))
  File "/home/daniele/Scaricati/spark/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1133, in __call__
  File "/home/daniele/Scaricati/spark/python/pyspark/sql/utils.py", line 63, in deco
return f(*a, **kw)
  File "/home/daniele/Scaricati/spark/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py", line 319, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o22.text.
: java.lang.reflect.InaccessibleObjectException: Unable to make field private transient java.lang.String java.net.URI.scheme accessible: module java.base does not "opens java.net" to unnamed module @779d0812
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:335)

有人可以帮我解决这个问题吗? 对不起,如果我的帖子不是那么清楚,但这是这个论坛上的第一个。 感谢所有愿意提供帮助的人, 丹尼尔。

【问题讨论】:

  • 您的 Java 版本是多少?自 Spark2.2.0 起,对 Java 7 的支持已被删除
  • openjdk version "9-Ubuntu" OpenJDK Runtime Environment (build 9-Ubuntu+0-9b161-1) OpenJDK 64-Bit Server VM (build 9-Ubuntu+0-9b161-1,混合模式)
  • 您能否检查在尝试读取另一个文本文件时是否遇到相同的错误(使用完整的绝对路径来确保它是正确的)。还可以尝试加载镶木地板。如果错误仍然存​​在,则可能是您的 spark-hadoop 安装有问题
  • 我试图读取另一个文件(使用完整路径),我得到了同样的错误,我不知道镶木地板是什么。为了安装 Spark,我做了这样的事情: - 安装了最新的 Java 版本:$sudo apt-get install openjdk-9-jre - 下载了Apache Spark(“为 Apache Hadoop 2.7 及更高版本预构建”)我是否跳过了一些重要的内容?
  • 我认为问题出在 spark 不支持 Java 9 的事实(它可能会在 Spark 3.X 中)。尝试安装 Java 8,设置所有必要的环境变量(JAVA_HOME、JRE_HOME)

标签: python apache-spark pyspark


【解决方案1】:

问题是你的spark版本和java版本不兼容。为了解决此问题,您必须执行以下操作:

  1. 检查你的 PySpark 版本:

    pyspark

  2. 检查您的 PySpark 版本需要哪个 Java 版本(例如,对于 PySpark 2.4.6,我们需要 Java 8 - https://spark.apache.org/docs/2.4.6/

  3. 检查您安装的可用 Java 版本

    /usr/libexec/java_home -V

  4. 如果您的 Java 版本不可用安装它(例如brew install adoptopenjdk8

  5. 更改您的 JAVA_HOME 以指向正确的版本。示例:

    export JAVA_HOME="/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home"

  6. 确认版本java -version

在此之后,您应该能够根据需要执行您的功能

textFile = spark.read.text("README.md")
textFile.show()

【讨论】:

    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 2017-09-01
    • 2019-04-06
    • 2015-09-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 2018-12-18
    相关资源
    最近更新 更多