【问题标题】:Py4J error when creating a spark dataframe using pyspark使用 pyspark 创建 spark 数据帧时出现 Py4J 错误
【发布时间】:2018-08-10 07:26:44
【问题描述】:

我已经使用 python 3.6 安装了 pyspark,并且我正在使用 jupyter notebook 来初始化 spark 会话。

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("test").enableHieSupport.getOrCreate()

运行没有任何错误

但我会写,

df = spark.range(10)
df.show()

它给我一个错误-->

Py4JError: An error occurred while calling o54.showString. Trace:
py4j.Py4JException: Method showString([class java.lang.Integer, class java.lang.Integer, class java.lang.Boolean]) does not exist
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318)
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326)
    at py4j.Gateway.invoke(Gateway.java:272)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:214)
    at java.lang.Thread.run(Thread.java:745)

我不知道我为什么会遇到这个问题。

如果我这样做,

from pyspark import SparkContext
sc = SparkContext()
print(sc.version)

'2.1.0'

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    我现在很高兴,因为我的 pyspark 遇到了完全相同的问题,并且我找到了“解决方案”。就我而言,我在 Windows 10 上运行。通过 Google 进行多次搜索后,我找到了设置所需环境变量的正确方法: PYTHONPATH=$SPARK_HOME$\python;$SPARK_HOME$\python\lib\py4j-<version>-src.zip Py4J 源代码包的版本在 Spark 版本之间会发生变化,因此,请检查 Spark 中的内容并相应地更改占位符。 有关该过程的完整参考,请访问此站点:how to install spark locally

    【讨论】:

      【解决方案2】:

      对我来说

      import findspark
      findspark.init()
      
      import pyspark
      

      解决了问题

      【讨论】:

        【解决方案3】:

        如果您在 anancoda 中使用 pyspark,请在运行代码之前添加以下代码以设置 SPARK_HOME:

        import os
        import sys
        spark_path = r"spark-2.3.2-bin-hadoop2.7" # spark installed folder
        os.environ['SPARK_HOME'] = spark_path
        sys.path.insert(0, spark_path + "/bin")
        sys.path.insert(0, spark_path + "/python/pyspark/")
        sys.path.insert(0, spark_path + "/python/lib/pyspark.zip")
        sys.path.insert(0, spark_path + "/python/lib/py4j-0.10.7-src.zip")
        

        【讨论】:

          【解决方案4】:

          我只需要将SPARK_HOME 环境变量设置为spark 的位置。我将以下行添加到我的 ~/.bashrc 文件中。

          # SPARK_HOME
          export SPARK_HOME="/home/pyuser/anaconda3/lib/python3.6/site-packages/pyspark/"
          

          由于我在不同环境中使用不同版本的 spark,因此我按照本教程 (link) 为每个 conda 环境创建环境变量。

          【讨论】:

            【解决方案5】:

            以下是对我使用 Jupyter 有用的步骤和工具组合:

            1) 安装 Java 1.8

            2) 在 PATH 中为 Java 设置环境变量,例如JAVA_HOME = C:\Program Files\Java\javasdk_1.8.241

            3) 使用 Conda Install 安装 PySpark 2.7(3.0 对我不起作用,它提示我匹配 PySpark 和 Spark 版本时出错...搜索 PySpark 2.7 的 Conda 安装代码

            4) 安装 Spark 2.4(3.0 不适合我)

            5) 将环境变量中的 SPARK_HOME 设置为 Spark 下载文件夹,例如SPARK_HOME = C:\Users\Spark

            6) 将环境变量中的 HADOOP_HOME 设置为 Spark 下载文件夹,例如HADOOP_HOME = C:\Users\Spark

            7) 下载winutils.exe解压Spark.tgz后放入Spark软件下载文件夹的bin文件夹中

            8) 在 Conda 中安装 FindSpark,在 Anaconda.org 网站上搜索并安装在 Jupyter notebook 中(这是避免出错的最重要步骤之一)

            9) 重新启动计算机以确保应用了环境变量

            10) 您可以通过在 Windows 命令提示符下键入以下内容来验证是否应用了环境变量:

            C:\> echo %SPARK_HOME% 
            

            这应该会显示您在 Windows 10 的高级设置中添加到 Windows PATH 的环境变量

            【讨论】:

              【解决方案6】:

              我认为spark.range 应该返回一个 RDD 对象。因此,show 不是您可以使用的方法。请改用collecttake

              如果您想使用show,也可以将spark.range 替换为sc.range

              【讨论】:

              • 我仍然面临错误。我还打印了“df”的类型,它显示了一个 Dataframe
              【解决方案7】:

              我遇到了类似的Constructor [...] does not exist 问题。然后我发现 PySpark 包的版本与服务器上安装的 Spark (2.4.4) 不一样。最后,我通过重新安装相同版本的 PySpark 解决了这个问题:

              pip install pyspark==2.4.4
              

              【讨论】:

                【解决方案8】:
                import findspark
                findspark.init("path of SparkORHadoop ")
                from pyspark import SparkContext
                

                你需要先设置 findspark.init() 然后你可以导入pyspark

                【讨论】:

                  【解决方案9】:
                   %env PYTHONPATH=%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j--src.zip:%PYTHONPATH%
                  !pip install findspark
                  import findspark 
                  !pip install pyspark==2.4.4 
                  import pyspark 
                  findspark.init() 
                  from pyspark import SparkConf, SparkContext
                  sc = pyspark.SparkContext.getOrCreate()
                  

                  您必须添加路径并为 Apache Spark 添加必要的库。

                  【讨论】:

                  • 您好!虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释并说明适用的限制和假设。
                  【解决方案10】:

                  在 Windows 10 的 Python 控制台中使用 PyCharm 和执行代码时,我遇到了同样的错误,但是,从终端启动 pyspark 时,我能够运行同样的代码而没有错误。在尝试了多次搜索的解决方案后,Pycharm Python 控制台错误的解决方案是以下两篇博文setup pyspark locallyspark & pycharm.

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-07-30
                    • 2021-01-16
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2022-08-16
                    相关资源
                    最近更新 更多