绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
如何使用spark或者hive sql将Excel文件加载为一张hive表
2022-09-16 16:32:45

一、Spark实现方案


  1. 创建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文件不宜过大,否则可能会产生性能问题,甚至任务失败不成功。如果文件很大,建议拆分为多个文件后将结果合并保存

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Spark SQL
创建时间:2022-04-11 10:32:39
Spark SQL
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~