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

如何在Jupyter Notebook中使用PySpark读取Avro文件?

如何在Jupyter Notebook中使用PySpark读取Avro文件?

Spark 2.4起,Avro是内置但需额外部署的数据源模块,需按照《Apache Avro数据源指南》的部署部分配置应用。

我尝试了以下操作:

! spark-submit --packages com.databricks:spark-avro_2.11-4.0.0.jar

方法1:

df = spark.read.format("com.databricks.spark.avro").load("xxx.avro")

方法2:

df= spark.read.format("avro").load("xxx.avro")

方法3:

from pyspark.sql import SparkSession
from pyspark import SparkConf, SparkContext
    
spark = SparkSession.builder \
            .appName('DataFrame') \
            .master('local[*]')\
            .config('spark.jars', 'spark-avro_2.11-4.0.0.jar') \
            .getOrCreate()
df = spark.read.format('avro').load(file)

出现报错:

AnalysisException: Failed to find data source: avro. Avro is built-in but external data source module since Spark 2.4. Please deploy the application as per the deployment section of "Apache Avro Data Source Guide".


解决方法

核心问题

报错原因是Avro依赖包未正确加载,或是版本不匹配、配置参数错误导致数据源未注册。

正确操作步骤

  1. 确认版本兼容性
    spark-avro版本必须和你的Spark、Scala版本对应,命名格式为com.databricks:spark-avro_{Scala版本}:{兼容Spark版本}。比如Spark 2.4.x搭配Scala 2.11时,com.databricks:spark-avro_2.11:4.0.0是正确的,请先核对环境版本是否匹配。

  2. Jupyter环境加载依赖的正确方式
    直接在Jupyter中执行spark-submit无法为当前PySpark会话加载依赖,需用以下两种方式之一:

    • 方式一:启动Jupyter时加载依赖
      在终端执行以下命令启动Jupyter,PySpark会自动下载并加载指定Avro包:
      pyspark --packages com.databricks:spark-avro_2.11:4.0.0
      
      启动后直接在Notebook中使用spark.read.format('avro')读取文件即可。
    • 方式二:初始化SparkSession时指定依赖
      不要用spark.jars参数(需手动管理本地jar包和依赖链),改用spark.jars.packages让Spark自动处理依赖:
      from pyspark.sql import SparkSession
      
      spark = SparkSession.builder \
                  .appName('AvroReader') \
                  .master('local[*]')\
                  .config('spark.jars.packages', 'com.databricks:spark-avro_2.11:4.0.0') \
                  .getOrCreate()
      # 读取Avro文件
      df = spark.read.format('avro').load('xxx.avro')
      # 验证结果
      df.show()
      
  3. 备选方案:使用完整数据源类名
    如果上述方法仍有问题,可尝试旧版完整类名(适配Databricks Avro包):

    df = spark.read.format("com.databricks.spark.avro").load("xxx.avro")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:05:19