本地创建 SparkContext 时出错调用 None.org.apache.spark.api.java.JavaSparkContext 时发生错误

rod*_*ocf 6 python apache-spark pyspark

我正在尝试在我的 Mac 上本地运行 Spark。到目前为止我有这个:

conf = SparkConf().setAppName('test').setMaster('local[*]')
sc = SparkContext(conf=conf)
Run Code Online (Sandbox Code Playgroud)

我知道我确实有JAVA_HOME(as /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home) 和SPARK_HOME(as /Users/myname/spark-3.1.1-amzn-0-bin-3.2.1-amzn-3,这是安装 Spark 的位置以及binfor Spark-submit 的位置,我也可以在我的终端上运行)。我得到这个:

py4j.protocol.Py4JJavaError: An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext.
: java.lang.NoSuchMethodError: io.netty.util.concurrent.SingleThreadEventExecutor.<init>(Lio/netty/util/concurrent/EventExecutorGroup;Ljava/util/concurrent/Executor;ZLjava/util/Queue;Lio/netty/util/concurrent/RejectedExecutionHandler;)V
    at io.netty.channel.SingleThreadEventLoop.<init>(SingleThreadEventLoop.java:65)
    at io.netty.channel.nio.NioEventLoop.<init>(NioEventLoop.java:138)
    at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:146)
    at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:37)
    at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84)
    at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:58)
    at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:47)
    at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:59)
    at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:86)
    at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:81)
    at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:68)
    at org.apache.spark.network.util.NettyUtils.createEventLoop(NettyUtils.java:66)
    at org.apache.spark.network.client.TransportClientFactory.<init>(TransportClientFactory.java:106)
    at org.apache.spark.network.TransportContext.createClientFactory(TransportContext.java:142)
    at org.apache.spark.rpc.netty.NettyRpcEnv.<init>(NettyRpcEnv.scala:77)
    at org.apache.spark.rpc.netty.NettyRpcEnvFactory.create(NettyRpcEnv.scala:493)
    at org.apache.spark.rpc.RpcEnv$.create(RpcEnv.scala:57)
    at org.apache.spark.SparkEnv$.create(SparkEnv.scala:266)
    at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:189)
    at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:277)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:458)
    at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:247)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
    at py4j.Gateway.invoke(Gateway.java:238)
    at py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:80)
    at py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:69)
    at py4j.GatewayConnection.run(GatewayConnection.java:238)
    at java.lang.Thread.run(Thread.java:748)
Run Code Online (Sandbox Code Playgroud)

我尝试从 PyCharm 中的 python 3.8 venv 运行它,以防有帮助。

我在其他地方看到过类似的错误,但没有看到任何适合我的解决方案:

获取 Py4JavaError:调用 None.org.apache.spark.api.java.JavaSparkContext https://superuser.com/questions/1436855/port-binding-error-in-pyspark PYspark SparkContext 错误“调用 None.org 时发生错误。 apache.spark.api.java.JavaSparkContext。” py4j.protocol.Py4JJavaError:调用 None.org.apache.spark.api.java.JavaSparkContext Spark2-submit 时发生错误, pyspark 失败

想法?

小智 5

尝试将 Java 版本更改为 JDK 8。当我的 JAVA_HOME 映射到 JDK 16 时,我遇到了同样的错误。通过将 JAVA_HOME 更改为 JDK 8 更正了该错误。


Emp*_*ess 2

我在尝试使用该amazon/aws-glue-libs:glue_libs_2.0.0_image_01图像时遇到了类似的问题。就我而言,问题是通过重新安装 pyspark 解决的。

java.lang.NoSuchMethodError有关正在使用的导致引发此错误的各种依赖项版本的提示。

如果您对使用 AWS Glue 的映像感兴趣,请查看以下提供的 Dockerfile:https: //github.com/DNXLabs/docker-glue-libs/blob/master/Dockerfile,但删除也同样容易glue-libs来自 Dockerfile。然后,该图像可以用作 PyCharm 中的远程解释器(例如,请参阅: https: //aws.amazon.com/blogs/big-data/developing-aws-glue-etl-jobs-locally-using-a-container / )

编辑:就我而言,问题是由使用时加载的以下 JAR 引起的aws-glue-libs

  • aws-glue-libs/jarsv1/javax.servlet-3.*
  • aws-glue-libs/jarsv1/netty-*

删除这些,问题就消失了