我正在尝试在我的笔记本电脑上安装 Pyspark 并按照 https://medium.com/@deepaksrawat1906/a-step-by-step-guide-to-installing-pyspark-on-windows 完成所有步骤-3589f0139a30
https://phoenixnap.com/kb/install-spark-on-windows-10
当我去设置我的 Spark 会话时:
from pyspark.sql import SparkSession
spark = SparkSession.builder.master("local").appName("PySpark Installation
Test").getOrCreate()
df = spark.createDataFrame([(1, "Hello"), (2, "World")], ["id", "message"])
df.show()
我收到此错误消息:
---------------------------------------------------------------------------
Py4JJavaError Traceback (most recent call last)
Cell In[3], line 6
1 from pyspark.sql import SparkSession
3 spark = SparkSession.builder \
4 .master("local[*]") \
5 .appName("YourAppName") \
----> 6 .getOrCreate()
File C:\spark\spark-3.4.3-bin-hadoop3\python\pyspark\sql\session.py:477, in SparkSession.Builder.getOrCreate(self)
475 sparkConf.set(key, value)
476 # This SparkContext may be an existing one.
--> 477 sc = SparkContext.getOrCreate(sparkConf)
478 # Do not update `SparkConf` for existing `SparkContext`, as it's shared
479 # by all sessions.
480 session = SparkSession(sc, options=self._options)
File C:\spark\spark-3.4.3-bin-hadoop3\python\pyspark\context.py:512, in SparkContext.getOrCreate(cls, conf)
510 with SparkContext._lock:
511 if SparkContext._active_spark_context is None:
--> 512 SparkContext(conf=conf or SparkConf())
513 assert SparkContext._active_spark_context is not None
514 return SparkContext._active_spark_context
File C:\spark\spark-3.4.3-bin-hadoop3\python\pyspark\context.py:200, in SparkContext.__init__(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer, conf, gateway, jsc, profiler_cls, udf_profiler_cls, memory_profiler_cls)
198 SparkContext._ensure_initialized(self, gateway=gateway, conf=conf)
199 try:
--> 200 self._do_init(
201 master,
202 appName,
203 sparkHome,
204 pyFiles,
205 environment,
206 batchSize,
207 serializer,
208 conf,
209 jsc,
210 profiler_cls,
211 udf_profiler_cls,
212 memory_profiler_cls,
213 )
214 except BaseException:
215 # If an error occurs, clean up in order to allow future SparkContext creation:
216 self.stop()
File C:\spark\spark-3.4.3-bin-hadoop3\python\pyspark\context.py:287, in SparkContext._do_init(self, master, appName, sparkHome, pyFiles, environment, batchSize, serializer, conf, jsc, profiler_cls, udf_profiler_cls, memory_profiler_cls)
284 self.environment["PYTHONHASHSEED"] = os.environ.get("PYTHONHASHSEED", "0")
286 # Create the Java SparkContext through Py4J
--> 287 self._jsc = jsc or self._initialize_context(self._conf._jconf)
288 # Reset the SparkConf to the one actually used by the SparkContext in JVM.
289 self._conf = SparkConf(_jconf=self._jsc.sc().conf())
File C:\spark\spark-3.4.3-bin-hadoop3\python\pyspark\context.py:417, in SparkContext._initialize_context(self, jconf)
413 """
414 Initialize SparkContext in function to allow subclass specific initialization
415 """
416 assert self._jvm is not None
--> 417 return self._jvm.JavaSparkContext(jconf)
File C:\spark\spark-3.4.3-bin-hadoop3\python\lib\py4j-0.10.9.7-src.zip\py4j\java_gateway.py:1587, in JavaClass.__call__(self, *args)
1581 command = proto.CONSTRUCTOR_COMMAND_NAME +\
1582 self._command_header +\
1583 args_command +\
1584 proto.END_COMMAND_PART
1586 answer = self._gateway_client.send_command(command)
-> 1587 return_value = get_return_value(
1588 answer, self._gateway_client, None, self._fqn)
1590 for temp_arg in temp_args:
1591 if hasattr(temp_arg, "_detach"):
File C:\spark\spark-3.4.3-bin-hadoop3\python\lib\py4j-0.10.9.7-src.zip\py4j\protocol.py:326, in get_return_value(answer, gateway_client, target_id, name)
324 value = OUTPUT_CONVERTER[type](answer[2:], gateway_client)
325 if answer[1] == REFERENCE_TYPE:
--> 326 raise Py4JJavaError(
327 "An error occurred while calling {0}{1}{2}.\n".
328 format(target_id, ".", name), value)
329 else:
330 raise Py4JError(
331 "An error occurred while calling {0}{1}{2}. Trace:\n{3}\n".
332 format(target_id, ".", name, value))
Py4JJavaError: An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext.
: java.lang.ExceptionInInitializerError
at org.apache.spark.unsafe.array.ByteArrayMethods.<clinit>(ByteArrayMethods.java:52)
at org.apache.spark.memory.MemoryManager.defaultPageSizeBytes$lzycompute(MemoryManager.scala:261)
at org.apache.spark.memory.MemoryManager.defaultPageSizeBytes(MemoryManager.scala:251)
at org.apache.spark.memory.MemoryManager.$anonfun$pageSizeBytes$1(MemoryManager.scala:270)
at scala.runtime.java8.JFunction0$mcJ$sp.apply(JFunction0$mcJ$sp.java:23)
at scala.Option.getOrElse(Option.scala:189)
at org.apache.spark.memory.MemoryManager.<init>(MemoryManager.scala:270)
at org.apache.spark.memory.UnifiedMemoryManager.<init>(UnifiedMemoryManager.scala:58)
at org.apache.spark.memory.UnifiedMemoryManager$.apply(UnifiedMemoryManager.scala:207)
at org.apache.spark.SparkEnv$.create(SparkEnv.scala:325)
at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:196)
at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:279)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:464)
at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58)
at
java .base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) 在 java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) 在 java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) 在 py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:247) 在 py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:374) 在 py4j.Gateway.invoke(Gateway.java:238) 在 py4j.commands.ConstructorCommand.invokeConstructor (ConstructorCommand.java:80) 在 py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:69) 在 py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182) 在 py4j.ClientServerConnection.run(ClientServerConnection.java:106) 在 java.base/java.lang.Thread.run(Thread.java:1570) 引起原因:java.lang.IllegalStateException:java.lang.NoSuchMethodException: java.nio.DirectByteBuffer.(long,int) 在 org.apache.spark.unsafe.Platform。(Platform.java:113) ... 25 更多 引起原因:java.lang.NoSuchMethodException:java.nio.DirectByteBuffer.(long,int) 在 java.base/java.lang.Class.getConstructor0(Class.java:3784) 在 java.base/java.lang.Class.getDeclaredConstructor(Class.java:2955) 在 org.apache.spark.unsafe.Platform。(Platform.java:71) ... 25 更多
谁能帮我解决这个问题? 谢谢
这个错误信息表明 Spark 无法在你的系统中分配内存,因为它找不到一个特定版本的
java.nio.DirectByteBuffer
构造函数。 这可能是由 Java 版本不兼容引起的。Spark 3.4.x 需要 Java 11。
以下是解决此问题的步骤:
- 检查你的 Java 版本 :
-
打开命令提示符并运行
java -version
。 -
确保你安装了 Java 11(不是更高版本)。如果你没有安装正确的版本,请从 Oracle 网站下载并安装: https://www.oracle.com/java/technologies/downloads/
-
设置 JAVA_HOME 环境变量 :
-
如果还没有设置,你需要设置
JAVA_HOME
环境变量,使其指向你的 Java 11 安装目录。 - 在 Windows 搜索栏中搜索 "编辑系统环境变量" 并打开它。
- 点击 "环境变量..." 按钮。
- 在 "系统变量" 部分,点击 "新建..."。
- 输入 "JAVA_HOME" 作为变量名,并输入你的 Java 11 JDK 安装目录的路径(例如,"C:\Program Files\Java\jdk-11.0.18")作为变量值。
-
点击 "确定" 保存所有更改。
-
更新 Spark 配置 :
-
打开
spark-defaults.conf
文件,该文件位于你的 Spark 安装目录的conf
文件夹中(例如,C:\spark\spark-3.4.3-bin-hadoop3\conf
)。 -
在文件末尾添加以下行:
spark.driver.extraJavaOptions -Djdk.nio.maxCachedBufferSize=262144
-
保存并关闭
spark-defaults.conf
文件。 -
重启你的系统 : 为了确保环境变量更改生效,最好重启你的电脑。
-
再次尝试运行你的 PySpark 代码 : 重启后,尝试再次运行你的 PySpark 代码。应该可以正常工作了。
如果问题仍然存在,请尝试以下操作:
-
确保你的
PATH
环境变量包含 Javabin
目录的路径。 - 尝试使用较旧版本的 Spark(例如,3.2.x),它可能与你当前的 Java 版本更兼容。
通过这些步骤,你应该能够解决这个问题并成功运行你的 PySpark 代码。
标签:python,apache-spark,pyspark,apache-spark-sql From: 78802710