Spark操作Excel最佳实践

Spark操作Excel最佳实践

      • 1、背景描述
      • 2、Apache POI与Spark-Excel
        • 2.1、Apache POI简介
        • 2.2、Spark-Excel简介
      • 3、Spark读取Excel
        • 3.1、导入依赖
        • 3.2、使用Apache POI
        • 3.3、使用Spark-Excel




1、背景描述


数据开发中通常会涉及到Excel的处理。Java和Apache Spark都不支持读取Excel文件,除了使用Python外,Spark操作Excel一般有两个框架:Apache POI和Spark-Excel

2、Apache POI与Spark-Excel

2.1、Apache POI简介

Apache POI(Poor Obfuscation Implementation)是Apache软件基金会的一个开源项目,提供了用于读写Microsoft Office格式文件(如Word、Excel、PowerPoint)的Java API

POI虽然支持多种文档格式的读写,但是我们最常用的还是对Excel文件的读写。POI技术使得Java开发人员能够轻松地操作和处理Office文档,它为我们提供了丰富的功能和灵活性

Apache POI针对Excel文件的读写提供了三个API:

  • HSSF:HSSF是POI项目对Excel 1997~2007文件格式(xls)的纯Java实现
  • XSSF:XSSF是POI项目对Excel 2007 OOXML文件格式(xlsx)的纯Java实现
  • SXSSF:SXSSF是XSSF的API兼容流扩展,可用于非常大的电子表格且堆空间有限的情况。SXSSF通过限制对滑动窗口内的行的访问来实现其低内存占用

API中的对象及解释如下:

  • Workbook:工作簿
  • Sheet:工作表
  • Row:行
  • Cell:单元格

Apache POI官网:http://poi.apache.org/index.html

Apache POI官方文档:https://poi.apache.org/apidocs/index.html

2.2、Spark-Excel简介

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

3、Spark读取Excel

3.1、导入依赖

首先导入所需依赖。除了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>
3.2、使用Apache POI

可以使用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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42282.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

挖K脚本检测指南

免责声明:本文仅做分享... 目录 挖K样本-Win&Linux-危害&定性 Linux-Web 安全漏洞导致挖K事件 Windows-系统口令爆破导致挖K事件 --怎么被挖K了??? 已经取得了权限. 挖K样本-Win&Linux-危害&定性 危害&#xff1a;CPU 拉满&#xff0c;网络阻塞&…

在Linux下使用Docker部署chirpstack

目录 一、前言 二、chirpstack 1、chirpstack是什么 2、chirpstack组件 3、为什么选择Docker部署 三、Linux下部署过程 四、web界面部署过程 一、前言 本篇文章我是在Linux下使用 Docker 进行部署chirpstack&#xff0c;chirpstack采用的是v4 版本&#xff0c;v4 版本 与…

Logstash常用的filter四大插件

以博客<ELK日志分析系统概述及部署>中实验结果为依据 补充&#xff1a;如何用正则表达式匹配一个ipv4地址 &#xff08;[0-9] | [1-9][0-9] | 1[0-9][0-9] | 2[04][0-9] | 25[0-5]&#xff09;\.&#xff08;[0-9] | [1-9][0-9] | 1[0-9][0-9] | 2[04][0-9] | 25[0-5]&a…

C++基础语法:嵌套类(内部类)

前言 "打牢基础,万事不愁" .C的基础语法的学习 引入 嵌套类的理解和使用 嵌套类(内部类)的特征 嵌套类是在类里面定义的类.class里嵌套另一个class,又称内部类(这种说法更形象) 1>内部类除了定义在外部类内部,和其他类没有太大区别.内部类对于外部类自动"可…

基于Java的数码论坛系统设计与实现

你好&#xff0c;我是计算机领域的研究者。如果你对数码论坛系统开发感兴趣或有相关需求&#xff0c;欢迎联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; Java技术、MySQL数据库、B/S架构、SpringBoot框架 工具&#xff1a; Eclipse、MySQ…

HJ41 称砝码下

接上文&#xff0c;HJ41 称砝码 更新acd代码&#xff0c;牛客代码如下 #include <stdio.h> #include <stdlib.h> #include <string.h>int calculateWeight(int *weight, int weightLen, int *num, int numLen) {int array[20001] {0};int hash[300001] {0…

css 文件重复类样式删除

上传文件 进行无关 className 删除 <div style"display: flex;"><input type"file" change"handleFileUpload" /><el-button click"removeStyles" :disabled"!fileContent">Remove Styles and Download&…

navigation运动规划学习笔记

DWA 动态窗口算法(Dynamic Window Approaches, DWA) 是基于预测控制理论的一种次优方法,因其在未知环境下能够安全、有效的避开障碍物, 同时具有计算量小, 反应迅速、可操作性强等特点。 DWA算法属于局部路径规划算法。 DWA算法的核心思想是根据移动机器人当前的位置状态和速…

antd a-select下拉框样式修改 vue3 亲测有效

记录一下遇到的问题 1.遇到问题&#xff1a; 使用到Vue3 Ant Design of Vue 3.2.20&#xff0c;但因为项目需求样式&#xff0c;各种查找资料都未能解决; 2.解决问题&#xff1a; ①我们审查元素可以看到&#xff0c;下拉框是在body中的; ①在a-select 元素上添加dropdownCla…

运行时异常与一般异常的异同

运行时异常与一般异常的异同 1、运行时异常&#xff08;Runtime Exception&#xff09;1.1 特点 2、 一般异常&#xff08;Checked Exception&#xff09;2.1 特点 3、异同点总结3.1 相同点3.2 不同点 4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷…

【全网最全最详细】Tomcat 面试题大全

目录 一、说一说Tomcat的启动流程 二、Tomcat中有哪些类加载器? 三、为什么Tomcat可以把线程数设置为200,而不是N+1? 四、Tomcat处理请求的过程怎样的? 五、说一说Servlet的生命周期 六、过滤器和拦截器的区别? 七、介绍一下Tomcat的IO模型 八、说一说Tomcat的类加…

大语言模型系列-Transformer介绍

大语言模型系列&#xff1a;Transformer介绍 引言 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;Transformer模型已经成为了许多任务的标准方法。自从Vaswani等人在2017年提出Transformer以来&#xff0c;它已经彻底改变了NLP模型的设计。本文将介绍Transforme…

图形学各种二维基础变换,原来线性代数还能这么用,太牛了

缩放变换 均匀缩放 若想将一个图形缩小0.5倍 若x乘上缩放值s等于x撇&#xff0c;y同理&#xff0c;则 x ′ s x y ′ s y \begin{aligned} & x^{\prime}s x \\ & y^{\prime}s y \end{aligned} ​x′sxy′sy​&#xff0c;这样就表示了x缩小了s倍&#xff0c;y也是…

UML中用例之间的可视化表示

用例除了与参与者有关联关系外&#xff0c;用例之间也存在着一定的关系&#xff0c;如泛化关系、包含关系、扩展关系等。 4.2.1 包含关系 包含关系指的是两个用例之间的关系&#xff0c;其中一个用例&#xff08;称为基本用例&#xff0c;Base Use Case&#xff09;的行为包…

温度传感器的常见故障及处理方法

温度传感器作为现代工业、科研及日常生活中不可或缺的重要元件&#xff0c;其稳定性和准确性直接影响到设备的运行效率和安全。然而&#xff0c;由于各种因素的影响&#xff0c;温度传感器在使用过程中常会遇到一些故障。本文将针对这些常见故障进行分析&#xff0c;并提出相应…

如果你想手写Linux系统

哈喽&#xff0c;我是子牙老师。今天咱们聊聊这个话题吧&#xff0c;Linux作为当今科技世界的地基&#xff0c;我们越来越接近真理了&#xff0c;有木有&#xff1f; 这个文章的角度&#xff0c;你可能全网都很难找到第二篇如此系统讲透这个问题的文章 你可能想问&#xff1a…

LabVIEW电滞回线测试系统

铁电材料的性能评估依赖于电滞回线的测量&#xff0c;这直接关系到材料的应用效果和寿命。传统的电滞回线测量方法操作复杂且设备成本高。开发了一种基于LabVIEW的电滞回线测试系统&#xff0c;解决传统方法的不足&#xff0c;降低成本&#xff0c;提高操作便捷性和数据分析的自…

spring boot 3.x版本中集成spring security 6.x版本进行实现动态权限控制解决方案

一、背景 最近在进行项目从jdk8和spring boot 2.7.x版本技术架构向jdk17和spring boot 3.3.x版本的代码迁移&#xff0c;在迁移过程中&#xff0c;发现spring boot 3.3.x版本依赖的spring security版本已经升级6.x版本了&#xff0c;语法上和spring security 5.x版本有很多地方…

Mysql中存储引擎简介、修改、查询、选择

场景 数据库存储引擎 数据库存储引擎是数据库底层软件组件&#xff0c;数据库管理系统&#xff08;DBMS &#xff09;使用数据引擎进行创建、查询、更新和删除数据的操作。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能&#xff0c;使用不同的存储引擎还可以…

【C++报错已解决】Invalid Use of ‘this’ Pointer

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言 一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一&#xff1a;修正‘this’指针使用2…