十一、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的结构化数据处理相关东东,但 ...
随机推荐
- JS 获取各个偶数之和!!
<html> <head> <meta charset="utf-8" /> <title>js& ...
- CentOS运行C++语言的Hello World
1,编写代码,hello.cpp #include <iostream> using namespace std; int main(){ cout<<"hello ...
- lamp-linux2
LAMP编程之Linux(2) 一.进阶指令 1.du指令 作用:du表示directory used,显示出目录所占的磁盘空间大小的情况. 语法:#du -sh 目录路径 选项说明: -s:表示su ...
- 线程池(Linux实现)
讨论QQ群:135202158 本文技术参考了sourceforge项目c thread pool,链接:http://sourceforge.net/projects/cthpool/ 线程池如上一 ...
- C语言多线程编程一
1. Windows下同时打开多个对话框: #include <Windows.h> #include <process.h> //创建线程 void runmsg(void ...
- Java网络编程以及简单的聊天程序
网络编程技术是互联网技术中的主流编程技术之一,懂的一些基本的操作是非常必要的.这章主要讲解网络编程,UDP和Socket编程,以及使用Socket做一个简单的聊天软件. 全部代码下载:链接 1.网络编 ...
- 调用jdbc已经写成的方法----jdbc工具类抽取方式一
package web09; /*获取连接和释放资源的方法 */ import java.sql.Connection; import java.sql.DriverManager; import j ...
- SuperMap(无对应字段)空间属性挂接
一.数据准备 将一个没有基本属性的模型数据集和一个含有位置等属性信息的shp属性表进行挂接,两组数据之间没有连接字段,但同属一个坐标系下,只能通过空间位置信息进行属性挂接. 二.数据处理 基本思路:将 ...
- 本地搭建sass运行环境
1.安装node.js 安装文件为msi文件,可到node.js官网下载安装包,下载路径为:https://nodejs.org/en/download/ 安装路径为默认路径,安装完成之后配置环境变量 ...
- ThreadLocal系列(三)-TransmittableThreadLocal的使用及原理解析
ThreadLocal系列(三)-TransmittableThreadLocal的使用及原理解析 上一篇:ThreadLocal系列(二)-InheritableThreadLocal的使用及原理解 ...