问题升级到Spark 2.3.1 - 维护版本

时间:2018-06-15 05:02:17

标签: apache-spark pyspark

由于

的修复,下载了最新的Spark版本
  

错误AsyncEventQueue:70 - 从队列appStatus中删除事件。

设置环境变量并在PyCharm中运行相同的代码后,我收到此错误,我无法找到解决方案。

Exception in thread "main" java.util.NoSuchElementException: key not found: _PYSPARK_DRIVER_CONN_INFO_PATH
    at scala.collection.MapLike$class.default(MapLike.scala:228)
    at scala.collection.AbstractMap.default(Map.scala:59)
    at scala.collection.MapLike$class.apply(MapLike.scala:141)
    at scala.collection.AbstractMap.apply(Map.scala:59)
    at org.apache.spark.api.python.PythonGatewayServer$.main(PythonGatewayServer.scala:64)
    at org.apache.spark.api.python.PythonGatewayServer.main(PythonGatewayServer.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:894)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:198)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:228)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:137)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

任何帮助?

5 个答案:

答案 0 :(得分:1)

我正在将Pyspark 2.3.1与pycharm 2018.1.4一起使用,并在Windows计算机上遇到类似的问题。 当我使用spark-submit运行此python文件时,它会成功执行。

我已按照以下步骤操作

  1. 在pycharm中创建了一个新项目,命名为Demo
  2. 转到设置->项目:演示->项目解释器。确保项目解释器是python 2.7
  3. 转到设置->项目:演示->项目结构。添加内容根。 我添加了两个内容根目录,一个指向存在apache spark内容的目录,另一个指向py4j-0.10.7.src.zip 就我而言,这些位置是
  

C:\ apache-spark

  

C:\ apache-spark \ python \ lib \ py4j-0.10.7-src.zip

  1. 创建了新的python文件(Demo1.py),并粘贴到其中的内容下方。

    from pyspark import SparkContext

    sc = SparkContext(master="local", appName="Spark Demo")

    rdd = sc.textFile("C:/apache-spark/README.md")

    wordsRDD = rdd.flatMap(lambda words: words.split(" "))

    wordsRDD = wordsRDD.map(lambda word: (word, 1))

    wordsCount = wordsRDD.reduceByKey(lambda x, y: x+y)

    print wordsCount.collect()

在pycharm上运行此python文件会出现以下错误

  

线程“ main”中的异常java.util.NoSuchElementException:键不是   找到:_PYSPARK_DRIVER_CONN_INFO_PATH

从命令提示符处执行时与同一程序相同,会产生正确的结果。

C:\Users\manish>spark-submit C:\Demo\demo1.py

有解决此问题的建议吗?

答案 1 :(得分:0)

我也有类似的例外。我的问题是运行jupyter,并与其他用户交流。当我使用相同的用户运行它们时,问题就解决了。

详细信息;

当我将Spark从v2.2.0更新到v2.3.1然后运行Jupyter笔记本时,错误日志如下;

Exception in thread "main" java.util.NoSuchElementException: key not found: _PYSPARK_DRIVER_CONN_INFO_PATH
    at scala.collection.MapLike$class.default(MapLike.scala:228)
    at scala.collection.AbstractMap.default(Map.scala:59)
    at scala.collection.MapLike$class.apply(MapLike.scala:141)
    at scala.collection.AbstractMap.apply(Map.scala:59)
    at org.apache.spark.api.python.PythonGatewayServer$.main(PythonGatewayServer.scala:64)
    at org.apache.spark.api.python.PythonGatewayServer.main(PythonGatewayServer.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:894)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:198)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:228)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:137)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

我在谷歌搜索时遇到以下链接; spark-commits mailing list archives 在代码

/core/src/main/scala/org/apache/spark/api/python/PythonGatewayServer.scala

有变化

+    // Communicate the connection information back to the python process by writing the
+    // information in the requested file. This needs to match the read side in java_gateway.py.
+    val connectionInfoPath = new File(sys.env("_PYSPARK_DRIVER_CONN_INFO_PATH"))
+    val tmpPath = Files.createTempFile(connectionInfoPath.getParentFile().toPath(),
+      "connection", ".info").toFile()

根据此更改,将在其中创建一个临时目录和一个文件。我的问题是运行jupyter,并与其他用户交流。因此,我认为该进程无法创建临时文件。当我以相同的用户身份运行它们时,问题解决了。希望对您有所帮助。

答案 2 :(得分:0)

我也遇到了这个问题,最终我从PyCharm导入/运行的pyspark代码仍然是spark 2.2安装,而不是我更新了SPARK_HOME所指向的spark 2.3安装。

具体来说,我在我的PyCharm项目结构中添加了spark-2.2,然后将其python文件夹标记为“ Sources”,因此PyCharm可以识别其所有符号。因此,PyCharm代码是从那里导入的,而不是spark-2.3,并且较旧的代码没有设置_PYSPARK_DRIVER_CONN_INFO_PATH环境变量。

如果Vezir的答案不能解决您的问题,请尝试跟踪创建SparkContext,并仔细比较从中读取的路径(而不是spark安装的路径)。同样,如果您是通过pip将pyspark安装到python项目中的,请确保已安装2.3.1以匹配已安装的spark版本。

答案 3 :(得分:0)

当您使用旧版pyspark(例如:2.3.0)运行spark 2.3.1 jar时,可能会发生这种情况

答案 4 :(得分:0)

我也遇到了这个问题。接下来就是我要做的事,希望对您有所帮助:

1 。找到您的Spark版本,我的Spark版本是2.4.3;

2 。找到您的pyspark版本,我的pyspark,version是2.2.0;

3 。与spark版本重新安装pyspark

pip install pyspark==2.4.3

然后一切正常。希望能帮助您。