Spark——Spark DataFrame导出为Excel文件

文章目录

  • 问题背景
  • 实现
    • 1. Maven依赖
    • 2. 代码实现
    • 3. 参数详解
      • 1. 'sheet_name'!B3:C35。
      • 2. sheet_name[#All]
  • 参考

 

问题背景

有时候我们在进行一些表的计算之后,会生成一些指标,需要导出来给其它同事用,虽说可以将DataFrame直接写成表,然后通过工具(比如Hue)导出为Excel,但是步骤就多了,而且如果要导出的表比较多的话,就更浪费时间了,那么这时候调用第三方插件就可以直接导出为Excel。

 

实现

1. Maven依赖

需添加的第三方依赖:

>
   >com.crealytics>
   >spark-excel_2.11>
   >0.12.5>
>

 

2. 代码实现

df.write
	.format("com.crealytics.spark.excel")
	.option("dataAddress", "'My Sheet'!B3:C35") // 指定sheet名称和要开始写入的cell位置或cell范围
	.option("useHeader", "false") //是否输出表头
	.option("dateFormat", "yyyy-mm-dd hh:mm:ss") // Optional, default: yy-m-d h:mm
	.option("timestampFormat", "yyyy-mm-dd hh:mm:ss") // Optional, default: yyyy-mm-dd hh:mm:ss.000
	.mode("append") // Optional, default: overwrite. "append"模式下可以在一个Excel文件中追加多个sheet
	.save("/file.xlsx") // 要输出的HDFS文件路径. 

3. 参数详解

下面就拿两种最常用的参数举例:

1. ‘sheet_name’!B3:C35。

  • sheet_name:表示要指定的sheet名称,如果不指定sheet,系统会给一个默认名称。另外,在追加模式下(mode=“append”),一个Excel文件可以写入多个sheet;
  • B3:C35:B3为起始位置,表示数据从B3这个cell位置开始写;C35为终止位置,表示数据写到C35这个位置为止。当然,可以只指定起始位置,那会从起始位置写入尽可能多的数据;也可以只指定终止位置,那会默认从表格的第一个cell也就是A1开始写数据,到指定的终止位置。

2. sheet_name[#All]

  • [#All]:表示从表格的第一个cell也就是A1开始写尽可能多的数据。

 

参考

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

你可能感兴趣的:(Spark,spark)