如何使用Spark Java API加载含多列的Excel文件至DataFrame
用Spark Java API读取多列Excel为DataFrame
Spark本身没有原生支持Excel文件读取,需要依赖第三方库,最常用的是crealytics/spark-excel,以下是具体实现步骤:
1. 添加依赖
如果用Maven管理项目,在pom.xml中加入对应版本的依赖(版本要和你的Spark版本匹配,比如Spark 3.x对应0.14.x系列):
<dependency> <groupId>com.crealytics</groupId> <artifactId>spark-excel_2.12</artifactId> <version>0.14.0</version> </dependency>
2. 读取Excel的Java代码
参考你提供的CSV读取写法,Excel读取的代码逻辑类似:
import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; public class ExcelToDataFrame { public static void main(String[] args) { SparkSession spark = SparkSession.builder() .appName("ExcelReader") .master("local[*]") // 本地调试用,生产环境删除该行 .getOrCreate(); String excelPath = "你的Excel文件路径,比如/data/sample.xlsx"; Dataset<Row> df = spark.read() .format("com.crealytics.spark.excel") .option("header", "true") // 将第一行作为列名 .option("inferSchema", "true") // 自动推断每列的数据类型 .option("sheetName", "Sheet1") // 指定要读取的工作表,默认读第一个 .load(excelPath); // 验证读取结果 df.show(); df.printSchema(); spark.stop(); } }
3. 常用参数说明
header: 设置为true时,把Excel第一行当作DataFrame的列名,和你读取CSV的逻辑一致inferSchema: 自动识别列的数据类型(比如整数、字符串、日期等),如果需要手动指定Schema,可以去掉这个参数,改用.schema()方法定义sheetName: 指定读取的工作表名称,若不设置默认读取第一个工作表dataAddress: 可以指定读取的单元格范围,比如"'Sheet2'!A1:D20",适合只需要Excel中部分数据的场景
内容的提问来源于stack exchange,提问作者Ishan Khanna
相关产品推荐
相关产品推荐

