在这里插入图片描述

lazy val spark = SparkSession
    .builder
    .appName(taskName)
    .config("hive.exec.dynamic.partition", "true")
    .config("hive.exec.dynamic.partition.mode", "nonstrict")
    .config("spark.sql.broadcastTimeout", 3000)
    .config("spark.sql.sources.partitionOverwriteMode", "dynamic")
    .enableHiveSupport() // 开启支持hive
    .getOrCreate()

1) 需要根据分区值,往hive表中插入数据时,spakSession的配置参数


    .config("hive.exec.dynamic.partition", "true")
   .config("hive.exec.dynamic.partition.mode", "nonstrict")

2)需要根据分区值,覆盖原来的分区时,需要配置的参数:

 .config("spark.sql.sources.partitionOverwriteMode", "dynamic")

注意:

  1. 如果表不存在,可以用df.write.saveAsTable()来创建表并写数据
  2. 如果表已经创建了,可以用df.write.insertInto()来写数据
  3. 根据分区列插入数据时, 分区列需要写在最后,否则分区字段不生效
df
  .withColumn("model_version", lit("2.0"))
  .withColumn("day", lit(getDay2(1)))
  .repartition(1)
  .write
  .mode("overwrite")
  .insertInto("temp.test_table")
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐