如何使用PySpark读取.xlsx格式Excel文件并存储为DataFrame?
使用PySpark读取.xlsx文件并转为Spark DataFrame
PySpark本身不支持直接读取Excel格式文件,需要依赖第三方库spark-excel来实现,以下是具体操作步骤和示例:
1. 引入依赖包
启动PySpark时,通过--packages参数加载spark-excel库(版本需与你的Spark、Scala版本匹配,示例对应Spark 3.x + Scala 2.12):
pyspark --packages com.crealytics:spark-excel_2.12:0.14.0
如果是在代码中初始化SparkSession,也可以直接配置依赖:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("ReadExcel") \ .config("spark.jars.packages", "com.crealytics:spark-excel_2.12:0.14.0") \ .getOrCreate()
2. 基础读取示例
若Excel文件第一行是表头,可直接读取并自动推断列类型:
# 读取xlsx文件 df = spark.read \ .format("com.crealytics.spark.excel") \ .option("header", "true") \ # 将第一行设为列名 .option("inferSchema", "true") \ # 自动推断各列数据类型 .load("/path/to/your/file.xlsx") # 验证结果 df.printSchema() # 查看DataFrame结构 df.show() # 展示前20行数据
3. 进阶参数配置
如果需要指定工作表、跳过空行或设置数据起始行,可添加对应的option:
df = spark.read \ .format("com.crealytics.spark.excel") \ .option("header", "true") \ .option("inferSchema", "true") \ .option("sheetName", "销售数据") \ # 指定读取的工作表名称 .option("startRow", 2) \ # 从第2行开始读取数据(表头在第1行) .option("ignoreEmptyRows", "true") \ # 忽略文件中的空行 .load("/path/to/your/file.xlsx")
关键注意事项
- 版本兼容:
spark-excel的版本需与Spark、Scala版本对应,比如Spark 3.x对应Scala 2.12,建议使用0.14.0及以上版本 - 分布式环境:如果在集群运行,需确保所有节点能访问到xlsx文件,或将文件上传至HDFS等分布式存储系统
- 性能优化:若已知数据Schema,建议用
.schema()方法手动指定,避免自动推断带来的性能开销
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

