李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
SparkSQL导入导出Excel文件
Leefs
2021-12-14 PM
1741℃
0条
[TOC] ### 前言 本篇使用的环境是: + spark版本:3.0.0 + scala版本:2.12 ### 一、导入依赖 ```xml
com.crealytics
spark-excel_2.12
0.14.0
``` 注意:如果使用scala 2.11版本需要使用如下依赖,不然会出现依赖版本不匹配 ```xml
com.crealytics
spark-excel_2.11
0.13.1
``` ### 二、读取Excel核心代码 ```sql def importExcelFunction(spark:SparkSession,path:String): DataFrame ={ spark.read .format("com.crealytics.spark.excel") .option("header","true") .option("sheetName", "Sheet1") .option("treatEmptyValuesAsNulls", "true") .option("inferSchema", "true") .option("addColorColumns", "False") .schema(schema) .load(path) } ``` **说明** | 参数 | 是否必须 | 说明 | | ----------------------- | -------- | ------------------------------------------------- | | format | 是 | 加载驱动 | | header | 是 | 是否加载表头信息(true:是,false:否) | | sheetName | 否 | 需要加载的工作表名称(如果有多个工作表时使用) | | treatEmptyValuesAsNulls | 否 | 是否将空值处理为null(true:是,false:否) | | inferSchema | 否 | 是否自动推断属性列的数据类型(true:是,false:否) | | addColorColumns | 否 | 默认false | | schema | 否 | 自定义数据结构和类型 | | load | 是 | 根据文件地址加载excel | ### 三、导出Excel文件核心代码 ```sql def exportExcelFunction(sparkData:DataFrame,savePath:String): Unit ={ sparkData.write .format("com.crealytics.spark.excel") .option("header","true") // .mode("append") .mode("overwrite") .save(savePath) } ``` | 参数 | 是否必须 | 说明 | | ------ | -------- | -------------------------------------------------------- | | format | 是 | 加载驱动 | | header | 是 | 是否指定表头 | | mode | 否 | 数据导出模式(append:在原来数据基础上追加,overwrite:覆盖) | | save | 是 | 保存文件 | ### 四、示例 #### 4.1 数据准备 + **student.xlsx** ![17.SparkSQL导入导出Excel文件01.jpg](https://lilinchao.com/usr/uploads/2021/12/2263714416.jpg) #### 4.2 需求 > 按照班级进行分组,将不同班级的学生名称按照逗号分隔,然后将结果导出到新的Excel文件 **得到结果如下** ![17.SparkSQL导入导出Excel文件02.jpg](https://lilinchao.com/usr/uploads/2021/12/4117219043.jpg) #### 4.3 完整代码 ```sql import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType} import org.apache.spark.sql.{DataFrame, SparkSession} /** * @author lilinchao * @date 2021/12/14 * @description Excel导入导出 **/ object ExcelImportAndExport { def main(args: Array[String]): Unit = { val spark = SparkSession.builder().appName("ExcelImportAndExport").master("local[1]").getOrCreate() val filePath = ClassLoader.getSystemResource("student.xlsx").getFile val frameData: DataFrame = importExcelFunction(spark,filePath) // frameData.show(10,false) frameData.createOrReplaceTempView("student") val frame: DataFrame = spark.sql( """ | select | cls, | concat_ws(',',collect_list(name)) as names | from student | group by cls """.stripMargin) exportExcelFunction(frame,"D://BC//student2.xlsx") frame.show(10,false) spark.stop() } //定义表头结构 val schema = StructType(List( StructField("id", StringType, nullable = false), StructField("name", StringType, nullable = false), StructField("age", IntegerType, nullable = false), StructField("sex", StringType, nullable = false), StructField("cls", StringType, nullable = false) ) ) /** * 加载Excel数据 * @param spark * @param path * @return */ def importExcelFunction(spark:SparkSession,path:String): DataFrame ={ spark.read .format("com.crealytics.spark.excel")//加载驱动 .option("header","true")//是否加载表头信息 .option("sheetName", "Sheet1")//需要加载工作表名称(如果有多个工作表时使用) .option("treatEmptyValuesAsNulls", "true") //是否将空值处理为null .option("inferSchema", "true") //是否自动推断属性列的数据类型 .option("addColorColumns", "False") //是否添加颜色列 .schema(schema)//自定义数据结构和类型 .load(path)//根据文件地址加载excel } /** * 将DataFrame数据导出到Excel * @param sparkData * @param savePath */ def exportExcelFunction(sparkData:DataFrame,savePath:String): Unit ={ sparkData.write .format("com.crealytics.spark.excel") .option("header","true") // .mode("append") // .mode("overwrite") .save(savePath) } } ``` *注意:student.xlsx文件放到resources根目录下*
标签:
Spark
,
Spark SQL
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/1746.html
上一篇
18.Hive正则表达式详解
下一篇
19.Hive自定义UDF函数
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
nginx
锁
Yarn
Spark Core
Spring
Map
排序
Flume
稀疏数组
前端
SpringCloudAlibaba
Quartz
MyBatis
SQL练习题
Typora
容器深入研究
高并发
JavaSE
Stream流
国产数据库改造
Java工具类
JavaWeb
数据结构
Redis
人工智能
序列化和反序列化
SpringBoot
递归
SpringCloud
Azkaban
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞