14 ,spark sql 例子 :四张表数据( student,course,score,teacher ),建表
1 ,数据准备 : 4 张表
- 学生表 ( student ) : ( sid , sname , ssex , sbirth , sclazz )
学号 ,姓名 ,性别 ,生日 ,班级
1 孙福龙 m 1989-03-09 1
2 王婷婷 w 1992-02-24 1
3 王丹丹 w 1989-05-20 2
4 孙尚文 m 2020-12-20 2
5 孙静雅 w 2022-02-20 1
6 王珞丹 w 1986-07-26 1
7 张三 w 1975-01-01 3
8 李四 m 1979-06-06 3
- 课程表 ( course) : ( cid , cname , tid )
课程号 ,课程名称 ,教工编号
1 J2SE t003
2 Java Web t002
3 SSH t001
4 Oracle t001
- 成绩表 ( score ) ( sid , cid , score )
学号 ,课程号 ,成绩
1 1 56
1 2 78
1 3 67
1 4 58
2 1 79
2 2 81
2 3 92
2 4 68
3 1 91
3 2 47
3 3 88
3 4 56
4 2 88
4 3 90
4 4 93
5 1 46
5 3 78
5 4 53
6 1 35
6 2 68
6 4 71
7 1 66
7 2 88
7 3 77
7 4 98
8 1 49
8 2 11
8 3 22
8 4 38
- 教师表 ( teacher ) ( tid , tname , tsex , tbirth , tlevel , tdepart )
教工编号 ,教工姓名 ,教工性别 ,教工出生年月 ,职称 ,部门
1 叶平 m 1987-05-20 level01 computer
2 贺高 m 1985-06-12 level01 computer
3 杨艳 w 1982-03-16 level02 programer
4 周磊 w 1975-11-17 level03 find
2 ,将数据上传到 s3 :
3 ,注意时间转换 : sql 中的 Date
package com.SparkSqlTestimport java.io.FileInputStream
import java.text.SimpleDateFormat
import java.util.Propertiesimport org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types._
import org.apache.spark.sql.{DataFrame, Row, SparkSession}import java.sql.Dateobject Demo01 {def main(args: Array[String]): Unit = {// 1 ,spark 上下文val spark = SparkSession.builder().master("local[2]").config("spark.eventLog.enabled", "false").config("spark.driver.memory", "2g").config("spark.executor.memory", "2g").appName("SparkDemoFromS3").getOrCreate()// 1 ,日志级别spark.sparkContext.setLogLevel("WARN")// 2 ,读资源文件val properties = new Properties()val path = Thread.currentThread().getContextClassLoader.getResource("conf/s3.properties").getPathproperties.load(new FileInputStream(path))// 3 ,设置数据源 ( s3 )val sc: SparkContext = spark.sparkContextsc.hadoopConfiguration.set("fs.s3a.access.key", properties.getProperty("fs.s3a.access.key"))sc.hadoopConfiguration.set("fs.s3a.secret.key", properties.getProperty("fs.s3a.secret.key"))sc.hadoopConfiguration.set("fs.s3a.endpoint", properties.getProperty("fs.s3a.endpoint"))// 4 ,隐式转换import spark.implicits._val format: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd")// 5 ,建表 student ( 读文件 ,rowrdd ,schema )val rddStudent: RDD[String] = spark.sparkContext.textFile("s3a://lifecyclebigdata/test/data03/student.csv")val rddRowStudent: RDD[Row] = rddStudent.map(line => {val arr: Array[String] = line.split("\t")Row(arr(0).toInt, arr(1), arr(2), new Date(format.parse(arr(3)).getTime), arr(4).toInt)})val fieldsStudent: Array[StructField] = Array(StructField("id", IntegerType, true),StructField("name", StringType, true),StructField("sex", StringType, true),StructField("birth", DateType, true),StructField("clazz", IntegerType, true))val schemaStudent: StructType = StructType(fieldsStudent)val dfStudent: DataFrame = spark.createDataFrame(rddRowStudent,schemaStudent)// 5 ,注册表 ( student )dfStudent.createOrReplaceTempView("student")spark.sql("select * from student").show()spark.close()}
}
4 ,建表 : 4 张表
- 代码 :
package com.SparkSqlTestimport java.io.FileInputStream
import java.text.SimpleDateFormat
import java.util.Propertiesimport org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types._
import org.apache.spark.sql.{DataFrame, Row, SparkSession}import java.sql.Dateobject Demo01 {def main(args: Array[String]): Unit = {// 1 ,spark 上下文val spark = SparkSession.builder().master("local[2]").config("spark.eventLog.enabled", "false").config("spark.driver.memory", "2g").config("spark.executor.memory", "2g").appName("SparkDemoFromS3").getOrCreate()// 1 ,日志级别spark.sparkContext.setLogLevel("WARN")// 2 ,读资源文件val properties = new Properties()val path = Thread.currentThread().getContextClassLoader.getResource("conf/s3.properties").getPathproperties.load(new FileInputStream(path))// 3 ,设置数据源 ( s3 )val sc: SparkContext = spark.sparkContextsc.hadoopConfiguration.set("fs.s3a.access.key", properties.getProperty("fs.s3a.access.key"))sc.hadoopConfiguration.set("fs.s3a.secret.key", properties.getProperty("fs.s3a.secret.key"))sc.hadoopConfiguration.set("fs.s3a.endpoint", properties.getProperty("fs.s3a.endpoint"))// 4 ,隐式转换import spark.implicits._val format: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd")// 1 ,注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表// 1 ,注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表// 1 ,注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表// 5 ,建表 student ( 读文件 ,rowrdd ,schema )val rddStudent: RDD[String] = spark.sparkContext.textFile("s3a://lifecyclebigdata/test/data03/student.csv")val rddRowStudent: RDD[Row] = rddStudent.map(line => {val arr: Array[String] = line.split("\t")Row(arr(0).toInt, arr(1), arr(2), new Date(format.parse(arr(3)).getTime), arr(4).toInt)})val fieldsStudent: Array[StructField] = Array(StructField("sid", IntegerType, true),StructField("sname", StringType, true),StructField("ssex", StringType, true),StructField("sbirth", DateType, true),StructField("sclazz", IntegerType, true))val schemaStudent: StructType = StructType(fieldsStudent)val dfStudent: DataFrame = spark.createDataFrame(rddRowStudent,schemaStudent)// 注册表 ( student )dfStudent.createOrReplaceTempView("student")// 2 ,注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表// 2 ,注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表// 2 ,注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表// 6 ,建表 student ( 读文件 ,rowrdd ,schema )val rddCourse: RDD[String] = spark.sparkContext.textFile("s3a://lifecyclebigdata/test/data03/course.csv")val rddRowCourse: RDD[Row] = rddCourse.map(line => {val arr: Array[String] = line.split("\t")Row(arr(0).toInt, arr(1), arr(2))})val fieldsCourse: Array[StructField] = Array(StructField("cid", IntegerType, true),StructField("cname", StringType, true),StructField("tid", StringType, true))val schemaCourse: StructType = StructType(fieldsCourse)val dfCourse: DataFrame = spark.createDataFrame(rddRowCourse,schemaCourse)// 注册表 ( course )dfCourse.createOrReplaceTempView("course")// 2 ,注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表// 2 ,注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表// 2 ,注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表// 7 ,建表 score ( 读文件 ,rowrdd ,schema )val rddScore: RDD[String] = spark.sparkContext.textFile("s3a://lifecyclebigdata/test/data03/score.csv")val rddRowScore: RDD[Row] = rddScore.map(line => {val arr: Array[String] = line.split("\t")Row(arr(0).toInt, arr(1).toInt, arr(2).toInt)})val fieldsScore: Array[StructField] = Array(StructField("sid", IntegerType, true),StructField("cid", IntegerType, true),StructField("score", IntegerType, true))val schemaScore: StructType = StructType(fieldsScore)val dfScore: DataFrame = spark.createDataFrame(rddRowScore,schemaScore)dfScore.createOrReplaceTempView("score")// 2 ,注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表// 2 ,注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表// 2 ,注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表注册表// 7 ,建表 score ( 读文件 ,rowrdd ,schema )val rddTeacher: RDD[String] = spark.sparkContext.textFile("s3a://lifecyclebigdata/test/data03/teacher.csv")val rddRowTeacher: RDD[Row] = rddTeacher.map(line => {val arr: Array[String] = line.split("\t")Row(arr(0).toInt, arr(1), arr(2), new Date(format.parse(arr(3)).getTime), arr(4), arr(5))})val fieldsTeacher: Array[StructField] = Array(StructField("tid", IntegerType, true),StructField("tname", StringType, true),StructField("tsex", StringType, true),StructField("tbirth", DateType, true),StructField("tlevel", StringType, true),StructField("tdepart", StringType, true))val schemaTeacher: StructType = StructType(fieldsTeacher)val dfTeacher: DataFrame = spark.createDataFrame(rddRowTeacher,schemaTeacher)dfTeacher.createOrReplaceTempView("teacher")// 建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束// 建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束// 建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束// 建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束// 建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束,建表结束// sql 语句 :// 1 ,查全部spark.sql("select * from student").show()spark.sql("select * from course").show()spark.sql("select * from score").show()spark.sql("select * from teacher").show()spark.close()}
}
- 结果 : student ,course ,score ,teacher
+---+------+----+----------+------+
|sid| sname|ssex| sbirth|sclazz|
+---+------+----+----------+------+
| 1|孙福龙| m|1989-03-09| 1|
| 2|王婷婷| w|1992-02-24| 1|
| 3|王丹丹| w|1989-05-20| 2|
| 4|孙尚文| m|2020-12-20| 2|
| 5|孙静雅| w|2022-02-20| 1|
| 6|王珞丹| w|1986-07-26| 1|
| 7| 张三| w|1975-01-01| 3|
| 8| 李四| m|1979-06-06| 3|
+---+------+----+----------+------++---+--------+----+
|cid| cname| tid|
+---+--------+----+
| 1| J2SE|t003|
| 2|Java Web|t002|
| 3| SSH|t001|
| 4| Oracle|t001|
+---+--------+----++---+---+-----+
|sid|cid|score|
+---+---+-----+
| 1| 1| 56|
| 1| 2| 78|
| 1| 3| 67|
| 1| 4| 58|
| 2| 1| 79|
| 2| 2| 81|
| 2| 3| 92|
| 2| 4| 68|
| 3| 1| 91|
| 3| 2| 47|
| 3| 3| 88|
| 3| 4| 56|
| 4| 2| 88|
| 4| 3| 90|
| 4| 4| 93|
| 5| 1| 46|
| 5| 3| 78|
| 5| 4| 53|
| 6| 1| 35|
| 6| 2| 68|
+---+---+-----+
only showing top 20 rows+---+-----+----+----------+-------+---------+
|tid|tname|tsex| tbirth| tlevel| tdepart|
+---+-----+----+----------+-------+---------+
| 1| 叶平| m|1987-05-20|level01| computer|
| 2| 贺高| m|1985-06-12|level01| computer|
| 3| 杨艳| w|1982-03-16|level02|programer|
| 4| 周磊| w|1975-11-17|level03| find|
+---+-----+----+----------+-------+---------+
14 ,spark sql 例子 :四张表数据( student,course,score,teacher ),建表相关推荐
- dataframe记录数_大数据系列之Spark SQL、DataFrame和RDD数据统计与可视化
Spark大数据分析中涉及到RDD.Data Frame和SparkSQL的操作,本文简要介绍三种方式在数据统计中的算子使用. 1.在IPython Notebook运行Python Spark程序 ...
- 使用Spark SQL读取Hive上的数据
Spark SQL主要目的是使得用户可以在Spark上使用SQL,其数据源既可以是RDD,也可以是外部的数据源(比如Parquet.Hive.Json等).Spark SQL的其中一个分支就是Spar ...
- oracle scott 关系图,oracle下scott用户的四张表(emp,dept,bonus,salgrade)的建表语句:
scott用户的四张表(emp,dept,bonus,salgrade)的建表语句 emp -- Create table create table EMP ( empno NUMBER(4) not ...
- python比较excel表格内容并提取_利用python提取多张excel表数据并汇总到同一张新表中...
接上篇文章<如何用python实现excel中的vlookup功能?>,上篇说到,最近我在做一个小项目,也是用python操作excel解决财务审计工作上的一些问题,以便提高工作效率及其准 ...
- Spark SQL(五)之数据加载与存储
一.数据加载 (1)默认数据源(parquet) 最简单加载数据的方式,所有操作都使用默认数据源(parquet).如果指定默认数据源需要配置 spark.sql.sources.default参数. ...
- 使用Spark SQL 探索“全国失信人数据”
"全国法院失信被执行人名单",网址:http://shixin.court.gov.cn/,可供查询,用于惩罚失信人员.数据量有100多万,也算是大数据了.其中身份证号已被处理,并 ...
- Access和SQL server开启表间关系,并实现更新或删除母表数据自动更新或删除子表数据...
1.Access开启表间关系,并实现删除母表数据自动删除子表数据: 在Tables等界面 - > 右键 - > Relationships... -> 弹出Relationships ...
- Spark SQL(四)之DataSet与RDD转换
一.创建DataSet DataSet与RDD相似,但是,它们不使用Java序列化或Kryo,而是使用专用的Encoder对对象进行序列化以进行网络处理或传输.虽然编码器和标准序列化都负责将对象转换为 ...
- Hive 两张表数据验证方案、两张大表如何进行数据验证以及剔除部分字段进行数据验证
最近的问题是,宽表在上线之前,需要在测试环境进行试跑,试跑结束后如何跟线上正式数据进行比对呢?简单记录一下设计方案. 1.小表数据验证 一些字段比较少的表进行数据验证的方案之前出过 Hive 数据模型 ...
最新文章
- Android 多渠道打包
- 面试收集--卡特兰数(Catalan数)应用
- 未将对象引用设置到对象的实例--可能出现的问题总结
- MYSQL: DML/DDL/DCL
- py脚本得到Python的版本
- 获取Servlet原生的API
- js 添加事件 attachEvent 和 addEventListener 的区别
- apicloud模块和html,APICloud教程
- 信息学奥赛一本通(1110:查找特定的值)
- 南昌大学c语言大作业,南昌大学计算机C语言答案2
- java 阿拉伯数字日期转换为中文大写日期方法_日期转换为中文大写数字
- 毕设之 yolo5 航空影像飞行器检测
- 英诺重明320T服务器安装VMware操作系统流程(图文超详细版)
- 利用Euclid算法求解两个数的最大公约数及逆 matlab
- java8的lambda中的map相关操作
- Chrome 扩展程序——Imagus:图片放大预览工具
- 30个Kafka常见错误小集合
- 学计算机的一定要独立显卡嘛,电脑没有独立显卡会怎么样
- 十二星座的12种风味咖啡,最后一个能让你上瘾
- 云原生系列技术(四):DevOps技术