赞
踩
数据开发中通常会涉及到Excel的处理。Java和Apache Spark都不支持读取Excel文件,除了使用Python外,Spark操作Excel一般有两个框架:Apache POI和Spark-Excel
Apache POI(Poor Obfuscation Implementation)是Apache软件基金会的一个开源项目,提供了用于读写Microsoft Office格式文件(如Word、Excel、PowerPoint)的Java API
POI虽然支持多种文档格式的读写,但是我们最常用的还是对Excel文件的读写。POI技术使得Java开发人员能够轻松地操作和处理Office文档,它为我们提供了丰富的功能和灵活性
Apache POI针对Excel文件的读写提供了三个API:
API中的对象及解释如下:
Apache POI官网:http://poi.apache.org/index.html
Apache POI官方文档:https://poi.apache.org/apidocs/index.html
Spark-Excel是一个强大的开源库,专为Apache Spark设计,用于在大数据环境中高效地读取、写入和操作Excel文件。该项目由Crealytics团队开发并维护,为那些需要在大规模数据分析中与Excel文件打交道的用户提供了一种灵活而高效的选择
Spark-Excel无缝集成了Apache Spark框架,允许用户直接在DataFrame或Dataset上操作Excel数据,无需先将其转换为其他格式。它充分利用了Spark的分布式计算能力,能够处理大规模的数据集
Spark-Excel内部使用了流行的Apache POI库来解析和生成Excel文件,提供了对老版本(xls)和新版本(xlsx)的兼容性,并支持复杂的Excel特性,例如表格样式、公式和超链接等
Spark-Excel实现了高效的内存管理和缓存策略,减少了不必要的磁盘IO,提高了整体性能。对于大型数据集,它可以分块读写,避免一次性加载整个文件导致的内存压力
Spark-Excel官方文档:https://index.scala-lang.org/crealytics/spark-excel
首先导入所需依赖。除了Spark-Core、Spark-SQL和Spark-Hive依赖外,本次使用到的其它核心依赖如下:
<!-- Java-Excel依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> <!-- Spark-Excel依赖 --> <dependency> <groupId>com.crealytics</groupId> <artifactId>spark-excel_2.12</artifactId> <version>0.13.7</version> </dependency> <!--单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency>
可以使用Apache POI先将Excel文件转换成CSV或TXT文件,然后再使用Spark读取CSV或TXT文件
为方便使用,我们封装Apache POI读取和转换Excel文件的工具类POIUtils.java
1)工具类POIUtils.java
package com.cc;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Lis
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。