使用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.spark

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SparkSession

object 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腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

相关推荐
蓝创工坊Blue Foundry9 小时前
PaddleOCR 本地部署教程:小模型 OCR 如何完成字段提取到 Excel
pdf·自动化·ocr·excel·paddlepaddle·paddle
愤怒的苹果ext9 小时前
Apache Superset 使用
apache·doris·bi·superset·ai bi
qq_1851986910 小时前
骆驼任务Flowable + Apache Camel 集成
spring·apache·flowable
wujian831111 小时前
怎么用AI做excel表格 AI导出鸭来救场
人工智能·ai·excel·豆包·deepseek·ai导出鸭
用户2986985301411 小时前
React 前端处理 Excel 工作表复制的技术实践
javascript·react.js·excel
ClickHouseDB11 小时前
ClickHouse 十年开源,今非昔比!
clickhouse·开源·apache
蓝创工坊Blue Foundry1 天前
个人藏书太多怎么整理?用 OCR 字段提取汇总成电子书目
pdf·ocr·excel·文心一言·paddlepaddle·paddle
代码不会写1 天前
Apache Iceberg:架构原理、读写机制、性能优化与生态
性能优化·架构·apache·iceberg
蓝创工坊Blue Foundry1 天前
扫描件批量转 Excel:先确认要整表还原还是字段汇总
python·pdf·ocr·excel
Dylan的码园1 天前
从Excel到数据库:数据分析全流程与Kettle ETL实战指南
数据库·数据分析·excel