创建增量表时出现Pyspark Py4JJava错误

ecfsfe2w  于 2022-11-01  发布在  Spark
关注(0)|答案(2)|浏览(265)

下面是运行在jupyter笔记本上的pyspark代码。

import pyspark
from delta import *
builder = pyspark.sql.SparkSession.builder.appName("MyApp") \
         .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \

         .config("spark.sql.catalog.spark_catalog",
         "org.apache.spark.sql.delta.catalog.DeltaCatalog")
spark = configure_spark_with_delta_pip(builder).getOrCreate()

错误:

Py 4Java错误:调用None. org. apache. spark. api. java. JavaSparkContext时发生错误。错误:java.lang.IllegalAccessError:类org.apache.spark.storage.StorageUtils$(在未命名的模块@0x30cb5b99中)无法访问类sun.nio.ch.DirectBuffer(在模块java.base中),因为模块java.base未将www.example.com导出sun.nio.ch到未命名的模块@0x30cb5b99

配置:

  • Spark差=1.1.0
  • 比Spark=3.2.0
  • Java版本:OpenJDK运行时环境Homebrew(build 17. 0. 1 +1)OpenJDK 64位服务器VM Homebrew(build 17. 0. 1 +1,混合模式,共享)

.bash配置文件:

export HADOOP_HOME=/opt/hadoop-2.8.0
export SPARK_HOME=/opt/spark-3.2.0-bin-hadoop3.2
export PATH=$SPARK_HOME/bin:$PATH
export PYSPARK_PYTHON=python3
export PYSPARK_DRIVER_PYTHON="jupyter"
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"

请帮助我解决这个错误。2预先感谢。

vd2z7a6w

vd2z7a6w1#

注:我的英语很差,我使用deepl.com来翻译我的母语文章,我尽量使用尽可能多的代码。
用pip或conda安装pyspark3.1和pyspark3.2会有一些问题,原因我不能探究,解决方案如下。
1.安装python 3.8和java 8。
建议使用anaconda或miniconda来安装python 3.8和jupyter笔记本电脑,同时安装JDK 8(https://www.oracle.com/java/technologies/downloads/#java8),正如spark 3.2.1文档所述:“Spark运行在Java 8/11、Scala 2.12/2.13、Python 3.6+和R 3.5+上。自Spark 3.2.0起不再支持Python 3.6。自Spark 3.2.0起不再支持8 u201之前版本的Java 8。对于Scala API,Spark 3.2.1使用Scala 2.12,您需要使用一个兼容的Scala版本(2.12.x)。由于Apache Arrow支持的Python版本的原因,Arrow优化和PandasUDF可能无法工作。请参考最新的Python兼容性页面。对于Java 11,Apache Arrow程式库另外需要-Dio.netty.tryReflectionSetAccessible=true。这会防止java.lang.UnsupportedOperationException:当Apache Arrow在内部使用Netty时,sun.misc.不安全或java.nio.DirectByteBuffer.(long,int)不可用。”
1.安装py 4j和pyarrow
conda安装py 4j pyarrow
1.从https://spark.apache.org/downloads.html下载spark文件并解压缩,将pyspark文件夹从Spark文件夹的python目录复制到conda包目录(例如C:\Users\wjh\miniconda 3\Lib\site-packages)。
1.设置环境变量。将“%SPARK_HOME%\bin”添加到系统变量x1c 0d1x的路径中
最后,我对Linux不熟悉,你的.bash_profile的问题可能是PYSPARK_PYTHON的值,没有必要设置PYSPARK_DRIVER_PYTHON和PYSPARK_DRIVER_PYTHON_OPTS,除非你想在命令中键入pyspark后打开笔记本。但那样你就无法访问交互了。

lmvvr0a8

lmvvr0a82#

您的Spark版本可能与Delta Lake不相容。您可以尝试旧版的Spark。
例如,现在Spark的当前版本是PySpark 3. 3,它不支持Delta Lake。所以,我将Spark降级为3. 1以使Delta工作。

相关问题