一、Spark实现方案
- 创建Hive外部表, 数据保存格式为parquet
create external table `bigdatalearnshare.test_excel_file`(
`id` string,
`name` string,
`age` string)
stored as parquet
location '/bigdatalearnshare/test/test_excel_file';
2. spark代码demo
spark版本: 2.4.3
scala版本: 2.11.8
maven pom文件中除了spark等相关依赖包外,需有支持的Excel插件:
<dependency>
<groupId>com.crealytics</groupId>
<artifactId>spark-excel_2.11</artifactId>
<version>0.11.1</version>
<!-- 按需确定是否需要排除一些依赖包 -->
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
</exclusion>
<exclusion>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
</exclusion>
</exclusions>
</dependency>
Code Demo:
<!-- 本地测试设置的一些参数。
spark在实际生产中需要设置的参数还有很多,详细参考官网和实际的应用场景 -->
val sparkSession = SparkSession
.builder()
.config("spark.sql.warehouse.dir", warehouseLocation)
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.enableHiveSupport()
.appName("with_hive")
.master("local[*]")
.getOrCreate()
val ds = sparkSession.read.options(Map("useHeader" -> "true")).format("com.crealytics.spark.excel")
.load("/Users/test/Desktop/test_excel_file.xlsx")
//hive表路径或者hive分区路径
//保存模式有多种, SaveMode.Overwrite为覆盖
val path = "/bigdatalearnshare/test/test_excel_file"
ds.write.format("parquet").options(Map("" -> "")).mode(SaveMode.Overwrite).save(path)
// 测试数据是否保存成功。
//注意:本示例中创建的是非Hive分区表。如果是Hive分区表,还需要执行msck repair table table_name进行分区修复
sparkSession.sql("select * from test_excel_file").show()
二、Hive SQL实现
1. 先将Excel文件转换为普通文本文件,如CSV文件
注意: 文件编码格式建议统一采用UTF-8格式
2. Hive中建表
create external table `test_excel_file`(
`id` string,
`name` string,
`age` string)
row format delimited
fields terminated by ','
stored as TEXTFILE
location '/bigdatalearnshare/test/test_excel_file';
3. 在hive client端执行Hive SQL加载数据到Hive表
3.1 文件在服务器本地
load data local inpath '/bigdatalearnshare/test/test_excel_file.csv' into table test_excel_file;
3.2 文件在HDFS上
load data inpath '/bigdatalearnshare/test/test_excel_file.csv' into table test_excel_file;
注意: into前面可以加overwrite, 覆盖原有表数据
注意:
1. 实际应用中,需根据业务需求/实际情况创建Hive表以及数据存储格式、依赖包版本等,以上示例仅为参考。
2. 加载的Excel文件不宜过大,否则可能会产生性能问题,甚至任务失败不成功。如果文件很大,建议拆分为多个文件后将结果合并保存