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.pswp.cn/web/42282.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42282.shtml
英文地址,請注明出處:http://en.pswp.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…