You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark读取Snowflake/MSSQL数据时遇scala/$less$colon$less类缺失错误求助

解决PySpark读取Snowflake时的scala.$less$colon$less类找不到错误

尝试使用PySpark创建DataFrame读取Snowflake和MSSQL数据时,遇到如下错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o36.load.
: java.lang.NoClassDefFoundError: scala/$less$colon$less
        at net.snowflake.spark.snowflake.DefaultSource.shortName(DefaultSource.scala:44)
        ...
Caused by: java.lang.ClassNotFoundException: scala.$less$colon$less
        ...

核心原因

该错误本质是Snowflake Spark连接器与当前PySpark环境的Scala版本不兼容,或缺失必要的依赖包。scala.$less$colon$less对应Scala的::操作符类,当依赖的Scala版本和Spark运行环境不一致时,就会出现类找不到的问题。

解决步骤

1. 确认Scala版本匹配

  • 先查看PySpark对应的Scala版本:
    pyspark --version
    
    输出中会显示Scala版本,比如Scala version 2.12.15, Java HotSpot(TM) 64-Bit Server VM, 1.8.0_371
  • 选择与Spark、Scala版本完全匹配的Snowflake连接器:
    • Spark 3.x通常搭配Scala 2.12,Spark 2.x搭配Scala 2.11
    • 连接器命名规则:spark-snowflake_<scala_version>:<connector_version>-spark_<spark_version>,例如spark-snowflake_2.12:2.12.0-spark_3.3

2. 正确加载依赖包

方式一:启动PySpark时指定依赖

直接在启动命令中通过--packages参数加载正确的Snowflake和MSSQL依赖:

# 示例:Spark 3.3 + Scala 2.12
pyspark --packages \
net.snowflake:snowflake-jdbc:3.13.30, \
net.snowflake:spark-snowflake_2.12:2.12.0-spark_3.3, \
com.microsoft.sqlserver:mssql-jdbc:12.4.1.jre8

方式二:在SparkSession中配置依赖

如果使用Jupyter Notebook或代码脚本,在创建SparkSession时添加依赖配置:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("SnowflakeMSSQLReader") \
    .config("spark.jars.packages", 
            "net.snowflake:snowflake-jdbc:3.13.30,"
            "net.snowflake:spark-snowflake_2.12:2.12.0-spark_3.3,"
            "com.microsoft.sqlserver:mssql-jdbc:12.4.1.jre8") \
    .getOrCreate()

3. 清理旧依赖缓存

如果之前下载过不兼容的依赖包,清理本地缓存避免干扰:

  • 清理Ivy缓存:删除~/.ivy2/cache/net.snowflake目录
  • 清理Maven缓存:删除~/.m2/repository/net/snowflake目录

4. 验证连接

编写简单测试代码验证Snowflake连接是否正常:

# Snowflake连接配置
sf_config = {
    "sfURL": "your_account.snowflakecomputing.com",
    "sfUser": "your_username",
    "sfPassword": "your_password",
    "sfDatabase": "target_db",
    "sfSchema": "target_schema",
    "sfWarehouse": "target_warehouse"
}

# 读取Snowflake数据
df_snowflake = spark.read.format("snowflake").options(**sf_config).option("dbtable", "your_table").load()
df_snowflake.show(5)

# MSSQL读取示例(供参考)
mssql_config = {
    "url": "jdbc:sqlserver://your_mssql_host:1433;databaseName=target_db;",
    "dbtable": "your_mssql_table",
    "user": "mssql_user",
    "password": "mssql_password",
    "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

df_mssql = spark.read.format("jdbc").options(**mssql_config).load()
df_mssql.show(5)

内容的提问来源于stack exchange,提问作者Akhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:01:27