PySpark读取Redshift表报错java.lang.NoClassDefFoundError: scala/Product$class求助
解决PySpark读取Redshift时的scala/Product$class缺失错误
错误原因
这个错误是因为你使用的spark-redshift包基于Scala 2.11编译,但你的Spark 3.2.2版本默认适配Scala 2.12,二者版本不兼容导致类加载失败。
解决方案
替换为与Scala 2.12匹配的spark-redshift包版本,并调整代码如下:
import findspark # 使用Scala 2.12对应的spark-redshift包版本 findspark.add_packages("io.github.spark-redshift-community:spark-redshift_2.12:4.0.1") # 若出现AWS相关依赖缺失,可添加以下包(可选) # findspark.add_packages("com.amazonaws:aws-java-sdk-bundle:1.11.901", "org.apache.hadoop:hadoop-aws:3.3.1") findspark.init() from pyspark.sql import SparkSession spark = SparkSession.builder.appName("Dim_Customer").getOrCreate() df_read_1 = spark.read \ .format("io.github.spark_redshift_community.spark.redshift") \ .option("url", "jdbc:redshift://fake_ip:5439/fake_database?user=fake_user&password=fake_password") \ .option("dbtable", "dim_customer") \ .option("tempdir", "https://bucket-name.s3.region-code.amazonaws.com/") \ .load()
额外注意
- 确认S3临时目录
tempdir具备读写权限,Redshift需要将数据写入该目录后,Spark才能完成读取操作 - 如果仍有依赖问题,可以手动下载对应版本的jar包放入Spark的
jars目录,或在提交任务时通过--jars参数指定依赖
内容的提问来源于stack exchange,提问作者fernando fincatti
相关产品推荐
相关产品推荐

