Maven依赖配置文件准备
直接看这个帖子
SparkSql 用Scala代码查询Hive里面的指定的表
users.json
[{"name":"zhangsan" ,"age":18} ,{"name":"lisi" ,"age":15}]
代码
有两种方式, demo01 是原始的SQL
demo02是DataFrame的方式,DataFrame更强大,
而直接写SQL更灵活,学习成本低.其实两种都能满足业务开发.
import org.apache.spark.sql.SparkSession
object HiveWrite {
/**
* 创建方式1
*/
def demo01(spark: SparkSession): Unit = {
// 先创建换一个数据库
spark.sql("show databases").show
spark.sql("create database ceshi").show // 如果数据库存在会抛异常
spark.sql("use ceshi").show
spark.sql("create table user1(id int, name string)").show //如果表存在会抛异常
spark.sql("insert into user1 values(10, 'lisi')").show
}
/**
* 创建方式2
*
* @param spark
*/
def demo02(spark: SparkSession): Unit = {
spark.sql("show databases").show
spark.sql("create database ceshi2").show // 如果数据库存在会抛异常
//读取json里面的数据,转成DataFrame
val df = spark.read.json("E:\\ZJJ_SparkSQL\\demo01\\src\\main\\resources\\users.json")
spark.sql("use ceshi2")
// // 直接把数据写入到hive中. 表可以存着也可以不存在
df.write.mode("append").saveAsTable("user2")
df.write.insertInto("user2") // 基本等于 mode("append").saveAsTable("user2")
}
def main(args: Array[String]): Unit = {
// 设置登录人,不然会出现没有权限问题
System.setProperty("HADOOP_USER_NAME", "root")
val spark: SparkSession = SparkSession
.builder()
.master("local[*]")
.appName("HiveWrite")
.enableHiveSupport()
// 指定Hive的数据仓库的位置,这个路径是hdfs上面的路径
.config("spark.sql.warehouse.dir", "hdfs://zjj101:9000/user/hive/warehouse")
.getOrCreate()
// demo01(spark) // 创建数据库和表插入数据方式1
demo02(spark) // 创建数据库和表插入数据方式1
spark.close()
}
}