使用pyspark创建spark数据帧时出现Py4J错误

时间:2018-03-02 04:55:20

标签: python apache-spark pyspark

我已经安装了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'

10 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

如果您在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")

答案 3 :(得分:1)

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

1)安装Java 1.8

2)在Java的PATH中设置环境变量,例如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笔记本中安装(这是避免出错的最重要步骤之一)

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

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

C:\> echo %SPARK_HOME% 

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

对我来说

import findspark
findspark.init()

import pyspark

解决了问题

答案 6 :(得分:0)

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

pip install pyspark==2.4.4

答案 7 :(得分:0)

import findspark
findspark.init("path of SparkORHadoop ")
from pyspark import SparkContext

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

答案 8 :(得分:0)

 %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添加必要的库。

答案 9 :(得分:0)

在使用PyCharm并在Windows 10的Python控制台中执行代码时,我遇到了相同的错误,但是,从终端启动pyspark时,我能够运行相同的代码而没有错误。在尝试了许多搜索的解决方案之后,Pycharm Python Console错误的解决方案是以下两个博客文章{{3}中所有环境变量(我分别为用户和系统设置)和PyCharm设置步骤的组合。 }和setup pyspark locally