前言
在日常的工作中,表格内的工具是非常方便的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有更深入了解,在实践中更好地应用。