十一、spark SQL的scala示例
简介
spark SQL官网:http://spark.apache.org/docs/latest/sql-programming-guide.html
sparkSQL是构建在sparkCore之上的组件,用于处理结构化的数据。它将数据抽象为DataFrame并提供丰富的API,并且sparkSQL允许使用SQL脚本进行操作,使得数据查询变得非常的容易使用。
同时,sparkSQL除了操作简单,API丰富之外,对于数据源的支持也很强大。你可以从,如:
1)HDFS
2)Parguet文件
3)json文件
4)JDBC
5)ODBC
6)HIVE
等多种数据源来创建dataFrame,也可以从spark的RDD转换成dataFrame。
代码示例
下面是scala的代码示例:
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Row, SQLContext}
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.{SparkConf, SparkContext} /**
* @Description spark sql demo
* @Author lay
* @Date 2018/12/09 21:33
*/
object SparkSQLDemo {
var conf: SparkConf = _
var sc: SparkContext = _
var userData: Array[String] = Array("1 lay 23", "2 marry 24", "3 gary 25")
var userRDD: RDD[Row] = _
var sqlContext: SQLContext = _
var df: DataFrame = _ def init(): Unit = {
conf = new SparkConf().setAppName("spark sql demo").setMaster("local")
sc = new SparkContext(conf)
// 创建sqlContext
sqlContext = new SQLContext(sc)
// 创建schema
var structFields = Array(StructField("id", IntegerType), StructField("name", StringType), StructField("age", IntegerType))
var schema = new StructType(structFields)
// 创建RDD
userRDD = sc.parallelize(userData).map{x => val lines = x.split(" ");Row(lines(0).toInt, lines(1), lines(2).toInt)}
// 创建dataFrame
df = sqlContext.createDataFrame(userRDD, schema)
} def main(args: Array[String]): Unit = {
init()
// dataFrame方式查询:查询年龄大于23岁的用户的姓名
df.select("name").where("age > 23").show()
// 注册为t_user表
df.createOrReplaceTempView("t_user")
// SQL方式查询:年龄大于23岁的用户的姓名
sqlContext.sql("SELECT name FROM t_user WHERE age > 23").show()
}
}
以上代码将RDD通过StructType转换成了dataFrame,然后分别采用dataFrame的API和SQL两种方式查询出了结果,如图:

十一、spark SQL的scala示例的更多相关文章
- 二、spark SQL交互scala操作示例
一.安装spark spark SQL是spark的一个功能模块,所以我们事先要安装配置spark,参考: https://www.cnblogs.com/lay2017/p/10006935.htm ...
- 十、spark graphx的scala示例
简介 spark graphx官网:http://spark.apache.org/docs/latest/graphx-programming-guide.html#overview spark g ...
- 十二、spark MLlib的scala示例
简介 spark MLlib官网:http://spark.apache.org/docs/latest/ml-guide.html mllib是spark core之上的算法库,包含了丰富的机器学习 ...
- 平易近人、兼容并蓄——Spark SQL 1.3.0概览
自2013年3月面世以来,Spark SQL已经成为除Spark Core以外最大的Spark组件.除了接过Shark的接力棒,继续为Spark用户提供高性能的SQL on Hadoop解决方案之外, ...
- 【转载】Spark SQL 1.3.0 DataFrame介绍、使用
http://www.aboutyun.com/forum.php?mod=viewthread&tid=12358&page=1 1.DataFrame是什么?2.如何创建DataF ...
- 【转载】Spark SQL之External DataSource外部数据源
http://blog.csdn.net/oopsoom/article/details/42061077 一.Spark SQL External DataSource简介 随着Spark1.2的发 ...
- Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN
Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession ...
- Spark SQL External DataSource简介
随着Spark1.2的发布,Spark SQL开始正式支持外部数据源.这使得Spark SQL支持了更多的类型数据源,如json, parquet, avro, csv格式.只要我们愿意,我们可以开发 ...
- spark结构化数据处理:Spark SQL、DataFrame和Dataset
本文讲解Spark的结构化数据处理,主要包括:Spark SQL.DataFrame.Dataset以及Spark SQL服务等相关内容.本文主要讲解Spark 1.6.x的结构化数据处理相关东东,但 ...
随机推荐
- PAT乙级1091-1095
1091 N-自守数 (15 分) 如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3,而 2 的末尾两位正好是 9,所以 9 是一个 3-自守数 ...
- IDEA中配置SpringMVC框架 第一个演示【转】
环境: intellij IDEA 2017 CI JDK 1.8 tomcat 8.5.23 具体步骤 1.新建项目 勾选Spring MVC .Web Application(勾选了Spring ...
- Java中运算符“|”和“||”以及“&”和“&&”区别
1.“|”运算符:不论运算符左侧为true还是false,右侧语句都会进行判断,下面代码 int a =1,b=1; if(a++ == 1 | ++b == 2) System.out.printl ...
- robot framework学习笔记之二———变量
Robot Framework的变量分为标量, 列表和字典, 分别使用语法格式 ${SCALAR}, @{LIST} 和 &{DICT} 来定义. 此外, 环境变量可以直接使用语法 %{ENV ...
- vue + ElementUI 关闭对话框清空验证,清除form表单
前面跟大家提到过 elementUI验证的问题,那么今天就来看看 点击对话框和关闭按钮 怎么清空验证,清空form表单,避免二次点击还会有 验证错误的提示 1.首先在你的对话框 取消按钮 加一个cli ...
- Java_异常处理(Exception)
异常:Exception try{ //捕获异常 }catch{ //处理异常 } 异常处理机制: 1.在try块中,如果捕获了异常,那么剩余的代码都不会执行,会直接跳到catch中, 2.在try之 ...
- week 4 Vocabulary in paper
1.Using action verbs 1.1 deffenence between action verbs and fuzzy verbs Action verbs(strong verbs) ...
- [Alpha]Scrum Meeting#9
github 本次会议项目由PM召开,时间为4月11日晚上10点30分 时长10分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写每日例会报告 撰写每日例会报告撰写并整理任务分配博客 SiMrua ...
- python学习,day3:函数式编程,递归和高阶函数
# coding=utf-8 # Author: RyAn Bi def calc(n): #递归 print(n) if int(n/2) > 0: #设置条件,否则会循环999 次,报错, ...
- 新手入门贴之基于 python 语言的接口自动化 demo 小实战
大家好,我是正在学习接口测试的菜鸟.近期通过自己的学习,完成了一个关于测试接口的接口自动化demo.下面想跟大家分享一下,主要的思路是根据接口文档确定测试用例,并将测试用例写在excel中.因为只是小 ...