Maven依赖配置文件准备

直接看这个帖子
SparkSql 用Scala代码查询Hive里面的指定的表

users.json

  1. [{"name":"zhangsan" ,"age":18} ,{"name":"lisi" ,"age":15}]

代码

有两种方式, demo01 是原始的SQL

demo02是DataFrame的方式,DataFrame更强大,

而直接写SQL更灵活,学习成本低.其实两种都能满足业务开发.

  1. import org.apache.spark.sql.SparkSession
  2. object HiveWrite {
  3. /**
  4. * 创建方式1
  5. */
  6. def demo01(spark: SparkSession): Unit = {
  7. // 先创建换一个数据库
  8. spark.sql("show databases").show
  9. spark.sql("create database ceshi").show // 如果数据库存在会抛异常
  10. spark.sql("use ceshi").show
  11. spark.sql("create table user1(id int, name string)").show //如果表存在会抛异常
  12. spark.sql("insert into user1 values(10, 'lisi')").show
  13. }
  14. /**
  15. * 创建方式2
  16. *
  17. * @param spark
  18. */
  19. def demo02(spark: SparkSession): Unit = {
  20. spark.sql("show databases").show
  21. spark.sql("create database ceshi2").show // 如果数据库存在会抛异常
  22. //读取json里面的数据,转成DataFrame
  23. val df = spark.read.json("E:\\ZJJ_SparkSQL\\demo01\\src\\main\\resources\\users.json")
  24. spark.sql("use ceshi2")
  25. // // 直接把数据写入到hive中. 表可以存着也可以不存在
  26. df.write.mode("append").saveAsTable("user2")
  27. df.write.insertInto("user2") // 基本等于 mode("append").saveAsTable("user2")
  28. }
  29. def main(args: Array[String]): Unit = {
  30. // 设置登录人,不然会出现没有权限问题
  31. System.setProperty("HADOOP_USER_NAME", "root")
  32. val spark: SparkSession = SparkSession
  33. .builder()
  34. .master("local[*]")
  35. .appName("HiveWrite")
  36. .enableHiveSupport()
  37. // 指定Hive的数据仓库的位置,这个路径是hdfs上面的路径
  38. .config("spark.sql.warehouse.dir", "hdfs://zjj101:9000/user/hive/warehouse")
  39. .getOrCreate()
  40. // demo01(spark) // 创建数据库和表插入数据方式1
  41. demo02(spark) // 创建数据库和表插入数据方式1
  42. spark.close()
  43. }
  44. }

码云地址

添加链接描述