python 如何使用Windows命令行、Powershell或Jupyter Notebook建立到PySpark解释器的连接?

gojuced7  于 2023-01-16  发布在  Python
关注(0)|答案(1)|浏览(141)

我正在64位PC上使用Windows 11 Pro。我已经按照说明下载并设置了Hadoop环境(版本3. 3. 1),并将Winutils.exe文件(hadoop-3. 0. 0版本)存储在“bin”文件夹中,下载了Spark的等效版本(版本3. 3. 1),创建了新的环境变量,并在我的C:驱动器。另外,我的JAVA_HOME路径设置为C:\Program Files\Java\jdk-18\bin\java.exe
我可以使用“spark-shell”命令访问Scala解释器,但无法使用“pyspark”或.“\pyspark”命令访问PySpark解释器。我还在Anaconda中安装了pyspark(3.2.1)和py 4j(0.10.9.3)库,但当我在Powershell或Jupyter Notebook中运行“pyspark”命令时,收到以下错误。

Py4JJavaError: An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext.
: java.lang.IllegalAccessError: class org.apache.spark.storage.StorageUtils$ (in unnamed module @0x1f97cf0d) cannot access class sun.nio.ch.DirectBuffer (in module java.base) because module java.base does not export sun.nio.ch to unnamed module @0x1f97cf0d
    at org.apache.spark.storage.StorageUtils$.<init>(StorageUtils.scala:213)
    at org.apache.spark.storage.StorageUtils$.<clinit>(StorageUtils.scala)
    at org.apache.spark.storage.BlockManagerMasterEndpoint.<init>(BlockManagerMasterEndpoint.scala:110)
    at org.apache.spark.SparkEnv$.$anonfun$create$9(SparkEnv.scala:348)
    at org.apache.spark.SparkEnv$.registerOrLookupEndpoint$1(SparkEnv.scala:287)
    at org.apache.spark.SparkEnv$.create(SparkEnv.scala:336)
    at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:191)
    at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:277)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:460)
    at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58)
    at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
    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.ClientServerConnection.waitForCommands(ClientServerConnection.java:182)
    at py4j.ClientServerConnection.run(ClientServerConnection.java:106)
    at java.base/java.lang.Thread.run(Thread.java:833)
yqlxgs2m

yqlxgs2m1#

谢谢你的替代解决方案。经过一些研究,我能够使用以下方法建立一个工作版本的PySpark解释器:
1.下载最新版本的Java SDK并在“环境变量”中将%JAVA_HOME%变量设置为正确的路径。
1.下载 hadoop-3.3.1-src.tar.gz 并解压缩,然后将%HADOOP_HOME%变量设置为“环境变量”中的正确路径。
1.下载 spark-3.3.1-bin-hadoop 3.tgz 并解压缩,然后将%SPARK_HOME%变量设置为“环境变量”中的正确路径。
1.从 “https://github.com/steveloughran/winutils/tree/master/hadoop-3.0.0/bin ' 下载Winutils.exe,并将可执行文件放在 ”\spark\bin' 目录中。
1.使用以下命令检查Windows Subsystem for Linux在Docker Desktop和不同Linux Distro之间是否具有等效性:〉wsl -l -v。如果没有,则在命令提示符下或Powershell中使用以下命令将WSL更新为版本2:〉wsl --设置版本(发行版名称)2.
1.使用以下命令设置本地元存储区:〉mkdir C:\tmp\配置单元
1.然后:〉C:\hadoop\bin\winutils.exe chmod 777 /tmp/配置单元.
1.导航到Spark可执行文件安装所在的正确文件路径:〉cd C:\spark\bin(例如)。

  1. C:\spark\bin〉pyspark --主机-本地
    1.在C:\spark\bin〉提示符下,键入“pyspark”命令:C:\Spark\斌〉Spark.
    这似乎起作用了!

相关问题