我的原创地址:https://dongkelun.com/2018/12/04/sparkHivePatition/
前言
前面学习总结了Hive分区表,现在学习总结一下Spark如何操作Hive分区表,包括利用Spark DataFrame创建Hive的分区表和Spark向已经存在Hive分区表里插入数据,并记录一下遇到的问题以及如何解决。
1、Spark创建分区表
只写主要代码,完整代码见附录
val data = Array(("001", "张三", 21, "2018"), ("002", "李四", 18, "2017"))val df = spark.createDataFrame(data).toDF("id", "name", "age", "year")//可以将append改为overwrite,这样如果表已存在会删掉之前的表,新建表df.write.mode("append").partitionBy("year").saveAsTable("new_test_partition")
然后在Hive命令行里看一下,新建的表是否有分区字段year
用命令
desc new_test_partition;
或
show create table new_test_partition;
根据下面的结果可以看到新建的表确实有分区字段year
hive> desc new_test_partition; OK id string name string age int year string # Partition Information # col_name data_type comment year string Time taken: 0.432 seconds, Fetched: 9 row(s)
2、向已存在的表插入数据
2.1 Spark创建的分区表
这种情况其实和建表语句一样就可以了
不需要开启动态分区
df.write.mode("append").partitionBy("year").saveAsTable("new_test_partition")
当然也有其他方式插入数据,会在后面讲到。
2.2 在Hive命令行创建的表
这里主要指和Spark创建的表的文件格式不一样,Spark默认的文件格式为PARQUET,为在命令行Hive默认的文件格式为TEXTFILE,这种区别,也导致了异常的出现。
需要开启动态分区
不开启会有异常:
Exception in thread "main" org.apache.spark.SparkException: Dynamic partition strict mode requires at least one static partition column. To turn this off set hive.exec.dynamic.partition.mode=nonstrict
2.2.1 建表
點擊查看更多內容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦