PySpark连接Cassandra触发Py4JJavaError错误,求解决方案
问题分析
java.lang.NoClassDefFoundError: com/datastax/spark/connector/util/Logging 错误说明仅指定spark-cassandra-connector主jar包无法满足依赖需求,该类属于connector的关联依赖组件,单独添加主jar会缺失必要的依赖包。
解决方案
方案1:使用--packages自动拉取完整依赖(推荐)
放弃手动指定单个jar包,直接通过--packages传入spark-cassandra-connector的Maven坐标,Spark会自动下载并加载所有关联依赖:
./venv/bin/spark-submit \ --master local[*] \ --packages com.datastax.spark:spark-cassandra-connector_2.12:3.5.1,org.apache.kafka:kafka-clients:3.5.1,org.apache.spark:spark-sql-kafka-0-10_2.12:3.5.1 \ --conf spark.cassandra.connection.host=cassandra \ --conf spark.sql.extensions=com.datastax.spark.connector.CassandraSparkExtensions \ /home/rama/project/randomuser/spark_stream.py
如果之前--packages未生效,大概率是Docker容器内网络无法访问Maven中央仓库,可在命令中添加国内镜像仓库参数:
--repositories https://maven.aliyun.com/repository/public
方案2:手动指定所有依赖jar包
若无法使用--packages,需下载spark-cassandra-connector_2.12-3.5.1.jar的全部依赖包(可通过Maven仓库查看依赖树),并将所有jar路径用逗号分隔传入--jars:
./venv/bin/spark-submit \ --master local[*] \ --jars /opt/bitnami/spark/jars/spark-cassandra-connector_2.12-3.5.1.jar,/opt/bitnami/spark/jars/datastax-java-driver-core-4.17.0.jar,/opt/bitnami/spark/jars/guava-31.1-jre.jar,...(补充其他依赖jar路径) \ --packages org.apache.kafka:kafka-clients:3.5.1,org.apache.spark:spark-sql-kafka-0-10_2.12:3.5.1 \ --conf spark.cassandra.connection.host=cassandra \ --conf spark.sql.extensions=com.datastax.spark.connector.CassandraSparkExtensions \ /home/rama/project/randomuser/spark_stream.py
注意:此方法需确保所有依赖jar版本与Spark、Scala版本严格兼容,维护成本较高,不推荐使用。
额外检查点
- 确认Cassandra服务在Docker容器内正常运行,且
spark.cassandra.connection.host=cassandra能在Spark容器内解析到正确的容器IP(可通过ping cassandra测试) - 确保PySpark版本(3.5.1)与spark-cassandra-connector版本(3.5.1)完全匹配,版本不一致会引发兼容性问题
内容的提问来源于stack exchange,提问作者ramadhani nugraha
相关产品推荐
相关产品推荐

