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()

}
}
结果显示:
Spark SQL介绍_第1张图片

DataFrame

Spark SQL介绍_第2张图片
转换后显示Spark SQL介绍_第3张图片
根据字段查询
Spark SQL介绍_第4张图片
条件过滤
Spark SQL介绍_第5张图片
排序
Spark SQL介绍_第6张图片

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风格

Spark SQL介绍_第7张图片

将mysq作为数据源

Spark SQL介绍_第8张图片
持久化输出格式为json
Spark SQL介绍_第9张图片

****

你可能感兴趣的:(SparkSql)