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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:57:32