当前位置: 首页 > news >正文

SparkSQL整合Hive

spark-sql可以直接使用hive的元数据

1、环境搭建如下:

## 1、启动hive的元数据服务```shell
# 1、修改hive的配置文件
cd /usr/local/soft/hive-3.1.3/conf# 2、增加配置
vim hive-site.xml<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property># 3、启动hive元数据服务
nohup  hive --service metastore >> metastore.log 2>&1 &
```## 2、将hive的配置文件同步到spark conf目录下```sql
cp hive-site.xml /usr/local/soft/spark-3.1.3/conf/
```### 3、在spark sql命令行中使用hive的表```shell
#命令行启动spark-sql
spark-sql --master local#指定分区数为1
set spark.sql.shuffle.partitions=1;create external table if not exists students(id bigint comment '学生id',name string comment '学生姓名',age bigint comment '学生年龄',sex string comment '学生性别',clazz string comment '学生班级'
) comment '学生信息表'
row format delimited fields terminated by ','
stored as textfile 
location 'hdfs://master:9000/data/student';select clazz,count(1) as num from students
group by clazz;
```

2、在代码中写spark-sql

import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}object Demo1DataFrame {def main(args: Array[String]): Unit = {//1、创建spark sql环境val spark: SparkSession = SparkSession.builder().master("local").appName("df")//指定shuffle之后RDD的分区数.config("spark.sql.shuffle.partitions", 1).getOrCreate()import spark.implicits._//2、读取数据//DataFrame:在RDD的基础上增加了表结构,为了写sqlval studentDF: DataFrame = spark.read.format("csv").option("sep", ",").schema("id STRING,name STRING,age INT,sex STRING,clazz STRING").load("data/students.txt")//查看数据studentDF.show()//创建临时视图studentDF.createOrReplaceTempView("students")//编写sql处理数据val clazzNumDF: DataFrame = spark.sql("""|select clazz,count(1) as num|from students|group by clazz|""".stripMargin)clazzNumDF.show()import org.apache.spark.sql.functions._//使用DSL处理数据val clazzNum: DataFrame = studentDF.groupBy("clazz").agg(count("id") as "num")//保存结果clazzNum.write.format("csv").option("sep", "\t")//.save("data/clazz_num")//使用RDD处理数据val kvDS: RDD[(String, Int)] = studentDF//转换成RDD.rdd.map {//DF中的每一行是一个ROW对象case Row(id, name, age, sex, clazz: String) => (clazz, 1)}kvDS.reduceByKey(_ + _).foreach(println)}
}

http://www.lryc.cn/news/462380.html

相关文章:

  • Vue 3 和 Vue 2区别
  • React.memo和useMemo
  • Android中实现网络请求的方式有哪些?
  • 安卓13usb触摸唤醒系统 android13触摸唤醒
  • c++常用库函数
  • CSS 网格布局
  • python实现屏幕录制,录音录制工具
  • elementui 的 table 组件回显已选数据时候使用toggleRowSelection 方法的坑点
  • MATLAB基础应用精讲-【数模应用】负二项回归(附R语言和python代码实现)
  • 20240803 芯动科技 笔试
  • 如何将 ECharts 图表插入 HTML Canvas
  • 突破干扰,无人机自动驾驶技术详解
  • Xamarin学习计划
  • exchange online邮件系统EAM双因素认证技术方案
  • 【数据结构与算法】栈和队列
  • 基于php的图书管理系统
  • k8s Node节点维护
  • 【航天宏图旗下的PIE engine】
  • Python酷库之旅-第三方库Pandas(157)
  • 【原创】java+springboot+mysql校园表白墙网站设计与实现
  • CSS学习(Grid布局和flex布局比较)
  • RTThread-Nano学习二-RT-Thread启动流程
  • 排查sshfs挂载失败的问题
  • 【002】基于Spring Boot+Unipp的古诗词学习小程序【原创】
  • PageHelper循环依赖问题
  • k8s部署Kafka集群超详细讲解
  • 【数据采集工具】Sqoop从入门到面试学习总结
  • Matlab绘图总结(进阶)
  • QExcel 保存数据 (QtXlsxWriter库 编译)
  • k8s ETCD数据备份与恢复