Spark SQL介绍

概述:

  sparkSQL是spark用来处理结构化数据的一个模块
  提供了一个编程的抽象叫DataFrame作为分布式的查询引擎

作用

1)处理结构化数据
2)先将非机构化的数据转换为结构化数据

编程模型

1)sql select * from user;
2)DateFrame (DSL)
HQL:将sql转换为mr任务
SparkSql将sql转换为rdd任务

特点:

容易整合Spark
统一数据的访问方式
标注的数据连接
支持JDBC/ODBC
支持对接BI
兼容hive

代码范例

package demo

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, Row, SparkSession}

object sparksqlDemo {
def main(args: Array[String]): Unit = {
//构建sparksession
val sparksession: SparkSession = SparkSession.builder().appName(“sparksqlDemo”)
.master(“local[2]”).getOrCreate()

//创建rdd
val rdd1: RDD[String] = sparksession.sparkContext.textFile("hdfs://192.168.8.128:9000/sparksql.txt")

//split data
val rdd2: RDD[Array[String]] = rdd1.map(_.split("\t"))

//封装数据
val rdd3: RDD[Row] = rdd2.map(x => {
  val id: Int = x(0).toInt
  val name: String = x(1).toString
  val age: Int = x(2).toInt

  Row(id, name, age)
})
rdd2

//schema
val structType = StructType(List(
  StructField("id", IntegerType, true),
  StructField("name", StringType, true),
  StructField("age", IntegerType, true)
))

//create dataframe
val frame: DataFrame = sparksession.createDataFrame(rdd3,structType)

//register table
frame.registerTempTable("user_t")

//sql
val usql: DataFrame = sparksession.sql("select * from user_t")

//check result
usql.show()
sparksession.close()

}
}
结果显示:
在这里插入图片描述

DataFrame

在这里插入图片描述
转换后显示在这里插入图片描述
根据字段查询
在这里插入图片描述
条件过滤
在这里插入图片描述
排序
在这里插入图片描述

SQL格式

  ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019041317394250.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tlYmV4dWU=,size_16,color_FFFFFF,t_70)

DSL风格

在这里插入图片描述

将mysq作为数据源

在这里插入图片描述
持久化输出格式为json
在这里插入图片描述

****

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值