开发环境:IDEA
hadoop集群版本: 2.7.3
spark集群版本: 2.4.8
(1)需要导入pom依赖
com.crealytics spark-excel_2.120.13.5
(2)通过spark将示例数据构造为dataframe结构
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("ExcelFileToHdfs").setMaster("local[*]")
val sparkSession = SparkSession.builder().config(conf).getOrCreate()
val sc = sparkSession.sparkContext
val spark = new SQLContext(sc)
val dataframe = spark.createDataframe(Seq(
(0, gg, "10", "aaaaaaa"),
(1, ff, "62", "bbbbbbb"),
(2, ee, "15", "ccccccc"),
(3, dd, "44", "ddddddd")
)).toDF("id", "c1", "c2", "c3")
dataframe.show()
val hdfsFilePath = "存储路径"
dataframe.repartition(1).write
.format("com.crealytics.spark.excel")
.option("dataAddress", "A1") // 指定sheet名称和要开始写入的cell位置或cell范围
.option("header", "true") //是否输出表头
.option("encoding", "UTF-8")
.option("delimiter", ",")
.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(SaveMode.Append) // Optional, default: overwrite. "append"模式下可以在一个Excel文件中追加多个sheet
.save(hdfsFilePath) // 要输出的HDFS文件路径
}
}
需要注意:若数据中存在时间格式数据,需要指定时间格式,否则默认写入格式很蹩脚



