使用Apache Spark处理Excel文件的简易指南

前言

在日常的工作中,表格内的工具是非常方便的x,但是当表格变得非常多的时候,就需要一些特定的处理。Excel作为功能强大的数据处理软件,广泛应用于各行各业,从企业管理到数据分析,可谓无处不在。然而,面对大型且复杂的数据,Excel的处理能力可能力不从心。

对此,我们可借助Apache Spark这一分布式计算框架,凭借其强大的计算与数据处理能力,快速有效地处理Excel数据。这些数据进行一个分析,整理,筛选,排序。分析整理有用的内容。

操作

创建一个spark项目,在IntelliJ IDEA中创建Spark项目时,默认的目录结构如下:

project-root/
│
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── (Java source files)
│   │   └── scala/
│   │       └── (Scala source files)
│   └── test/
│       ├── java/
│       │   └── (Test Java source files)
│       └── scala/
│           └── (Test Scala source files)
├── resources/
│   └── (Resource files)
└── target/└── (Compiled output and build artifacts)

导入包

在build.sbt中添加操作文件的包

libraryDependencies ++= Seq("org.apache.spark" %% "spark-core" % sparkVersion,"org.apache.spark" %% "spark-sql" % sparkVersion,"org.apache.spark" %% "spark-mllib" % sparkVersion,"org.apache.spark" %% "spark-streaming" % sparkVersion,"com.norbitltd" %% "spoiwo_2.12" % "1.4.1","com.crealytics" %% "spark-excel" % "0.13.7","com.monitorjbl" %% "xlsx-streamer" % "2.1.0"
)

测试数据

name

age

Mic

1

Andy

3

Steven

1

首先

使用Spark读取Excel文件十分简便。只需在DataFrame API中指定文件路径及格式,Spark即可自动导入Excel文件并将其转成DataFrame,进而展开数据处理和分析。

代码示例

Spark不但提供多样的数据处理方式,更在DataFrame API中支持筛选、聚合和排序等操作。此外,内置丰富的数据处理函数和操作符使处理Excel数据更为便捷。

package com.example.sparkimport org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SparkSessionobject SparkTest {def main(args: Array[String]): Unit = {//scala版本val sparkConf = new SparkConf()sparkConf.setMaster("local")   //本地单线程运行sparkConf.setAppName("testJob")
//    val sc = new SparkContext(sparkConf)val spark = SparkSession.builder().config(sparkConf).appName("Excel Demo").getOrCreate()// 读取 Excel 文件val df = spark.read.format("com.crealytics.spark.excel").option("dataAddress", "'Sheet2'!A1:B2") // 可选,设置选择数据区域 例如 A1:C2。.option("useHeader", "false") // 必须,是否使用表头,false的话自己命名表头(_c0),true则第一行为表头.option("treatEmptyValuesAsNulls", "true") // 可选, 是否将空的单元格设置为null ,如果不设置为null 遇见空单元格会报错 默认t: true.option("inferSchema", "true") // 可选, default: false//.option("addColorColumns", "true") // 可选, default: false//.option("timestampFormat", "yyyy-mm-dd hh:mm:ss") // 可选, default: yyyy-mm-dd hh:mm:ss[.fffffffff]//.option("excerptSize", 6) // 可选, default: 10. If set and if schema inferred, number of rows to infer schema from//.option("workbookPassword", "pass") // 可选, default None. Requires unlimited strength JCE for older JVMs====//.option("maxRowsInMemory", 20) // 可选, default None. If set, uses a streaming reader which can help with big files====.schema(schema) // 可选, default: Either inferred schema, or all columns are Strings
//      .option("header", "true").load("path/to/excel/file.xlsx")// 显示 DataFrame 的内容df.show()// +-------+---+// |   name|age|// +-------+---+// |    Mic| 1|// |   Andy| 3|// | Steven| 1|// +-------+---+// 将 DataFrame 写入 Excel 文件df.write.format("com.crealytics.spark.excel").option("dataAddress", "'Sheet'!A1:B2").option("useHeader", "true")//.option("dateFormat", "yy-mmm-d") // Optional, default: yy-m-d h:mm//.option("timestampFormat", "mm-dd-yyyy hh:mm:ss") // Optional, default: yyyy-mm-dd hh:mm:ss.000.mode("append") // Optional, default: overwrite..option("header", "true").save("path/to/save/excel/file.xlsx")}}

数据处理结束后,可将结果保存在全新Excel文件或其他格式文件中。借助DataFrame API,无论保存在本地文件系统还是云端,均能轻松实现。保留数据亦可依照需求选择不同输出格式,如CSV,XLSX等。

总结一下

虽然仅处理基础数据,但在集群环境下,Spark展现出优秀的大规模数据处理能力。无论海量Excel数据还是复杂的结构化数据,都在Spark协助下,能轻松应对并满足各种数据处理与分析任务。

借助Apache Spark处理Excel文件,充分发挥分布式计算潜能,可让数据处理与分析过程更为高效出色,同时也极大提升数据处理效率和准确性。希望本文能让您对Spark处理Excel有更深入了解,在实践中更好地应用。

引用

https://github.com/crealytics/spark-excel

最后

点赞关注评论一键三连,每周分享技术干货、开源项目、实战经验、国外优质文章翻译等,您的关注将是我的更新动力

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

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

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

相关文章

使用xbindkeys设置鼠标侧键

1.安装如下包 sudo apt install xbindkeys xautomation 2.生成配置文件 xbindkeys --defaults > $HOME/.xbindkeysrc 3.确定侧键键号 在终端执行下面的代码: xev | grep button 此时会出现如下窗口,将鼠标指针移动到这个窗口上: 单…

如何应对利用加密隧道发起的网络攻击?

日前,网络安全公司Zscaler的 ThreatLabz研究团队编写发布了《2023年加密攻击态势调查报告》,报告数据显示,目前85.9%的网络威胁是通过加密通道发起的,包括恶意软件、数据窃取和网络钓鱼攻击。更重要的是,许多加密攻击使…

【机器学习】调配师:咖啡的完美预测

有一天,小明带着一脸期待找到了你这位数据分析大师。他掏出手机,屏幕上展示着一份详尽的Excel表格。“看,这是我咖啡店过去一年的数据。”他滑动着屏幕,“每个月的销售量、广告投入,还有当月的气温,我都记录…

【MYSQL】事务隔离级别

脏读、幻读、不可重复读 脏读 一个事务正在对一条记录做修改,在这个事务完成并提交前,另一个事务也来读取同一条记录,读取了这些未提交的“脏”数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被形…

APP跳转系统相机拍照和拍摄

拍照和拍摄功能&#xff0c;我们项目用得不多。最近在做&#xff0c;记录哈。 都是调用的手机自带的。 具体代码如下&#xff0c;可以结合《vue<input>标签调用 Android的获取文件》一起理解哈&#xff1b; private static Uri imageUri; private static Uri VedioUri;…

User电脑中睡眠和休眠的区别,及对不同环境下模式设置建议

睡眠模式&#xff08;Sleep&#xff09;&#xff1a; 特点&#xff1a; 电脑进入睡眠模式时&#xff0c;系统的状态会保存在RAM中&#xff0c;电脑的大部分组件都会被关闭&#xff0c;但RAM仍然得到电源供应以保持数据。这使得电脑能够快速唤醒&#xff0c;因为数据保持在内存中…

【控制篇 / 分流】(7.4) ❀ 01. 对指定IP网段访问进行分流 ❀ FortiGate 防火墙

【简介】公司有两条宽带&#xff0c;一条ADSL拨号用来上网&#xff0c;一条移动SDWAN&#xff0c;已经连通总部内网服务器&#xff0c;领导要求&#xff0c;只有访问公司服务器IP时走移动SDWAN&#xff0c;其它访问都走ADSL拨号&#xff0c;如果你是管理员&#xff0c;你知道有…

自定义 React Hooks:编写高效、整洁和可重用代码的秘密武器

欢迎来到神奇的 React 世界 大家好!在 React 的世界中,有一个强大的秘密武器,它往往隐藏在显而易见的地方,由于缺乏理解或熟悉而没有得到充分利用。 这个强大的工具,被称为自定义 React hooks,可以彻底改变我们编写 React 应用程序代码的方式。通过提取组件中的有状态逻辑,自…

查找局域网树莓派raspberry的mac地址和ip

依赖python库&#xff1a; pip install socket pip install scapy运行代码&#xff1a; import socket from scapy.layers.l2 import ARP, Ether, srpdef get_hostname(ip_address):try:return socket.gethostbyaddr(ip_address)[0]except socket.herror:# 未能解析主机名ret…

Electron Apple SignIn 登录

本人写博客&#xff0c;向来主张&#xff1a;代码要完整&#xff0c;代码可运行&#xff0c;文中不留下任何疑惑。 最讨厌写博客&#xff0c;代码只留下片段&#xff0c;文中关键的东西没写清楚。之前看了那么多文章&#xff0c;就是不告诉我clientId从哪来的。 官方资料地址&…

《Python数据分析技术栈》第02章 01 容器(Containers)

01 容器&#xff08;Containers&#xff09; 《Python数据分析技术栈》第02章 01 容器&#xff08;Containers&#xff09; In the previous chapter, we saw that a variable could have a data type like int, float, str, and so on, but holds only a single value. Cont…

【Emgu CV教程】5.5、几何变换之Remap()重映射

重映射的意思就是把原始图像中某位置的像素放置到目标图像指定位置的过程&#xff0c;在Emgu CV中&#xff0c;Remap()重映射函数可以实现图像的缩放、翻转等操作&#xff0c;函数定义如下&#xff1a; public static void Remap(IInputArray src, // 输入图像IOutputArray d…

WordPress后台底部版权信息“感谢使用 WordPress 进行创作”和版本号怎么修改或删除?

不知道各位WordPress站长在后台操作时&#xff0c;是否有注意到每一个页面底部左侧都有一个“感谢使用 WordPress 进行创作。”&#xff0c;其中WordPress还是带有nofollow标签的链接&#xff1b;而页面底部右侧都有一个WordPress版本号&#xff0c;如下图中的“6.4.2 版本”。…

Python 3 列表数据类型基本用法

介绍 列表 是 Python 中的一种数据结构&#xff0c;是一个可变、有序的元素序列。列表中的每个元素或值被称为一个项。就像字符串是在引号之间定义的字符一样&#xff0c;列表是通过在方括号 [ ] 之间放置值来定义的。 列表非常适合在需要处理许多相关值时使用。它们使您能够…

chisel入门初步1——基4的booth编码的单周期有符号乘法器实现

基4的booth编码乘法器原理说明 基2的booth编码 本质来说就是一个裂项重组&#xff0c;乘法器最重要的设计是改变部分积的数量&#xff0c;另外在考虑有符号数的情况下&#xff0c;最高位符号位有特别的意义。 &#xff08;注&#xff1a;部分积是指需要最后一起加和的所有部分…

js实例继承的例子和优缺点

构造继承是一种继承方式&#xff0c;通过使用构造函数来实现继承。在JavaScript中&#xff0c;构造继承是最早的继承方式之一&#xff0c;但随着ES6引入了类和基于类的继承方式&#xff0c;构造继承的应用逐渐减少。 构造继承的优点&#xff1a; 简单易用&#xff1a;构造继承…

使用的uview 微信高版本 头像昵称填写能力

<template><view><button class"cu-btn block bg-blue margin-tb-sm lg" tap"wxGetUserInfo">一键登录</button><view><!-- 提示窗示例 --><u-popup :show"show" background-color"#fff">&…

关于C#中的async/await的理解

1. 使用async标记的方法被认为是一个异步方法&#xff0c;如果不使用await关键字&#xff0c;调用跟普通方法没有区别 static async Task Main(string[] args){Console.WriteLine("主线程id&#xff1a;" Thread.CurrentThread.ManagedThreadId);TestAwait();Consol…

翻译: Streamlit从入门到精通六 实战缓存Cache请求数据

Streamlit从入门到精通 系列&#xff1a; 翻译: Streamlit从入门到精通 基础控件 一翻译: Streamlit从入门到精通 显示图表Graphs 地图Map 主题Themes 二翻译: Streamlit从入门到精通 构建一个机器学习应用程序 三翻译: Streamlit从入门到精通 部署一个机器学习应用程序 四翻译…

从matlab的fig图像文件中提取数据

这里用的是openfig&#xff08;&#xff09;函数打开的fig文件 →→→【matlab 中 fig 数据提取】 很简洁 →→→【MATLAB提取 .fig 文件中的数据】 这个给出了包含多个曲线的情况 →→→【提取matlab fig文件里的数据和legend】 chatgpt给出的方法 打开fig文件并保存数据 我的…