远程Windows端通过Spark连接Ubuntu上的Cassandra报错,如何解决?
解决Windows端Spark连接Cassandra的ClassNotFoundException错误
问题根源
错误源于Spark未正确加载Cassandra连接器依赖包,同时代码存在语法和参数配置问题。
具体修复步骤
1. 修正代码语法错误
- 导入
SparkContext和SparkConf时缺少逗号,正确写法:
from pyspark import SparkContext, SparkConf
- 实例化
SparkContext无需重复前缀,直接使用导入类:
sc = SparkContext(conf=conf)
2. 修正PYSPARK_SUBMIT_ARGS参数格式
原参数存在两处问题:spark.cassandra.connection.host未通过--conf传递,结尾应使用pyspark-shell而非pyspark;同时注意修正拼写错误executer为executor:
import os os.environ['PYSPARK_SUBMIT_ARGS'] = '--master spark://10.0.0.10:7077 \ --packages com.datastax.spark:spark-cassandra-connector_2.12:3.1.0 \ --conf spark.driver.extraJavaOptions=-Xss512m \ --conf spark.executor.extraJavaOptions=-Xss512m \ --conf spark.cassandra.connection.host=10.0.0.10 \ pyspark-shell'
3. 改用SparkSession配置(更简洁)
跳过SQLContext,直接用SparkSession整合配置与数据读取,参数传递更清晰:
import os os.environ['PYSPARK_SUBMIT_ARGS'] = '--master spark://10.0.0.10:7077 \ --packages com.datastax.spark:spark-cassandra-connector_2.12:3.1.0 \ --conf spark.driver.extraJavaOptions=-Xss512m \ --conf spark.executor.extraJavaOptions=-Xss512m \ pyspark-shell' import findspark findspark.init() from pyspark.sql import SparkSession from pyspark.sql.functions import col spark = SparkSession.builder \ .appName('example') \ .config('spark.cassandra.connection.host', '10.0.0.10') \ .getOrCreate() data_frame = spark.read \ .format('org.apache.spark.sql.cassandra') \ .options(table='table_one', keyspace='log_keyspace') \ .load() # 后续数据操作 a = data_frame.filter(col("col_1")<100000).select("col_1","col_2","col_3","col_4","col_5").toPandas()
4. 手动添加依赖包(应对网络下载失败)
若Windows无法自动下载连接器包,手动下载对应版本的spark-cassandra-connector_2.12-3.1.0.jar,放入Spark安装目录的jars文件夹,Spark启动时会自动加载该包。
验证要点
- 确认Windows与Ubuntu端的Spark、Scala版本和连接器版本匹配(
_2.12对应Scala 2.12,建议Spark版本为3.1.x)。 - 检查网络连通性:Windows可访问Ubuntu的Spark Master端口(7077)和Cassandra默认端口(9042)。
内容的提问来源于stack exchange,提问作者yz_waaz
相关产品推荐
相关产品推荐

