如何在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依赖包未正确加载,或是版本不匹配、配置参数错误导致数据源未注册。
正确操作步骤
确认版本兼容性
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是正确的,请先核对环境版本是否匹配。Jupyter环境加载依赖的正确方式
直接在Jupyter中执行spark-submit无法为当前PySpark会话加载依赖,需用以下两种方式之一:- 方式一:启动Jupyter时加载依赖
在终端执行以下命令启动Jupyter,PySpark会自动下载并加载指定Avro包:
启动后直接在Notebook中使用pyspark --packages com.databricks:spark-avro_2.11:4.0.0spark.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()
- 方式一:启动Jupyter时加载依赖
备选方案:使用完整数据源类名
如果上述方法仍有问题,可尝试旧版完整类名(适配Databricks Avro包):df = spark.read.format("com.databricks.spark.avro").load("xxx.avro")
内容的提问来源于stack exchange,提问作者EMKAY
相关产品推荐
相关产品推荐

