spark SQL初步认识

spark SQL是spark的一个模块,主要用于进行结构化数据的处理。它提供的最核心的编程抽象就是DataFrame。

DataFrame:它可以根据很多源进行构建,包括:结构化的数据文件,hive中的表,外部的关系型数据库,以及RDD

创建DataFrame

数据文件students.json

{"id":1, "name":"leo", "age":18}
{"id":2, "name":"jack", "age":19}
{"id":3, "name":"marry", "age":17}

spark-shell里创建DataFrame

//将文件上传到hdfs目录下
hadoop@master:~/wujiadong$ hadoop fs -put students.json /student/2016113012/spark
//启动spark shell
hadoop@slave01:~$ spark-shell
//导入SQLContext
scala> import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.SQLContext
//声明一个SQLContext的对象,以便对数据进行操作
scala> val sql = new SQLContext(sc)
warning: there was one deprecation warning; re-run with -deprecation for details
sql: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@27acd9a7
//读取数据
scala> val students = sql.read.json("hdfs://master:9000/student/2016113012/spark/students.json")
students: org.apache.spark.sql.DataFrame = [age: bigint, id: bigint ... 1 more field]
//显示数据
scala> students.show
+---+---+-----+
|age| id| name|
+---+---+-----+
| 18|  1|  leo|
| 19|  2| jack|
| 17|  3|marry|
+---+---+-----+

DataFrame常用操作

scala> students.show
+---+---+-----+
|age| id| name|
+---+---+-----+
| 18|  1|  leo|
| 19|  2| jack|
| 17|  3|marry|
+---+---+-----+scala> students.printSchema
root|-- age: long (nullable = true)|-- id: long (nullable = true)|-- name: string (nullable = true)scala> students.select("name").show
+-----+
| name|
+-----+
|  leo|
| jack|
|marry|
+-----+ scala> students.select(students("name"),students("age")+1).show
+-----+---------+
| name|(age + 1)|
+-----+---------+
|  leo|       19|
| jack|       20|
|marry|       18|
+-----+---------+scala> students.filter(students("age")>18).show
+---+---+----+
|age| id|name|
+---+---+----+
| 19|  2|jack|
+---+---+----+scala> students.groupBy("age").count().show
+---+-----+
|age|count|
+---+-----+
| 19|    1|
| 17|    1|
| 18|    1|
+---+-----+

两种方式将RDD转换成DataFrame

1)基于反射方式

package wujiadong_sparkSQLimport org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}/*** Created by Administrator on 2017/3/5.*/
object RDDDataFrameReflection {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("rdddatafromareflection")val sc = new SparkContext(conf)val sqlContext = new SQLContext(sc)val fileRDD = sc.textFile("hdfs://master:9000/student/2016113012/data/students.txt")val lineRDD = fileRDD.map(line => line.split(","))//将RDD和case class关联val studentsRDD = lineRDD.map(x => Students(x(0).toInt,x(1),x(2).toInt))//在scala中使用反射方式,进行rdd到dataframe的转换,需要手动导入一个隐式转换import sqlContext.implicits._val studentsDF = studentsRDD.toDF()//注册表studentsDF.registerTempTable("t_students")val df = sqlContext.sql("select * from t_students")df.rdd.foreach(row => println(row(0)+","+row(1)+","+row(2)))df.rdd.saveAsTextFile("hdfs://master:9000/student/2016113012/data/out")}}
//放到外面
case class Students(id:Int,name:String,age:Int)

运行结果

hadoop@master:~/wujiadong$ spark-submit --class wujiadong_sparkSQL.RDDDataFrameReflection  --executor-memory 500m --total-executor-cores 2 /home/hadoop/wujiadong/wujiadong.spark.jar
17/03/05 22:46:45 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
17/03/05 22:46:48 INFO Slf4jLogger: Slf4jLogger started
17/03/05 22:46:48 INFO Remoting: Starting remoting
17/03/05 22:46:49 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkDriver@192.168.1.131:34921]
17/03/05 22:46:49 WARN Utils: Service 'SparkUI' could not bind on port 4040. Attempting port 4041.
17/03/05 22:46:51 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.
17/03/05 22:47:00 INFO FileInputFormat: Total input paths to process : 1
17/03/05 22:47:07 INFO deprecation: mapred.tip.id is deprecated. Instead, use mapreduce.task.id
17/03/05 22:47:07 INFO deprecation: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id
17/03/05 22:47:07 INFO deprecation: mapred.task.is.map is deprecated. Instead, use mapreduce.task.ismap
17/03/05 22:47:07 INFO deprecation: mapred.task.partition is deprecated. Instead, use mapreduce.task.partition
17/03/05 22:47:07 INFO deprecation: mapred.job.id is deprecated. Instead, use mapreduce.job.id
1,leo,17
2,marry,17
3,jack,18
4,tom,19
17/03/05 22:47:10 INFO FileOutputCommitter: Saved output of task 'attempt_201703052247_0001_m_000000_1' to hdfs://master:9000/student/2016113012/data/out/_temporary/0/task_201703052247_0001_m_000000

2)编程接口方式

package wujiadong_sparkSQLimport org.apache.spark.sql.types._
import org.apache.spark.sql.{Row, SQLContext}
import org.apache.spark.{SparkConf, SparkContext}/*** Created by Administrator on 2017/3/5.*/
object RDDDataFrameBianchen {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("RDDDataFrameBianchen")val sc = new SparkContext(conf)val sqlContext = new SQLContext(sc)//指定地址创建rddval studentsRDD = sc.textFile("hdfs://master:9000/student/2016113012/data/students.txt").map(_.split(","))//将rdd映射到rowRDDval RowRDD = studentsRDD.map(x => Row(x(0).toInt,x(1),x(2).toInt))//以编程方式动态构造元素据val schema = StructType(List(StructField("id",IntegerType,true),StructField("name",StringType,true),StructField("age",IntegerType,true)))//将schema信息映射到rowRDDval studentsDF = sqlContext.createDataFrame(RowRDD,schema)//注册表studentsDF.registerTempTable("t_students")val df = sqlContext.sql("select * from t_students order by age")df.rdd.collect().foreach(row => println(row))}}

运行结果

hadoop@master:~/wujiadong$ spark-submit --class wujiadong_sparkSQL.RDDDataFrameBianchen --executor-memory 500m --total-executor-cores 2 /home/hadoop/wujiadong/wujiadong.spark.jar
17/03/06 11:07:25 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
17/03/06 11:07:27 INFO Slf4jLogger: Slf4jLogger started
17/03/06 11:07:27 INFO Remoting: Starting remoting
17/03/06 11:07:28 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkDriver@192.168.1.131:49756]
17/03/06 11:07:32 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.
17/03/06 11:07:38 INFO FileInputFormat: Total input paths to process : 1
17/03/06 11:07:44 INFO deprecation: mapred.tip.id is deprecated. Instead, use mapreduce.task.id
17/03/06 11:07:44 INFO deprecation: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id
17/03/06 11:07:44 INFO deprecation: mapred.task.is.map is deprecated. Instead, use mapreduce.task.ismap
17/03/06 11:07:44 INFO deprecation: mapred.task.partition is deprecated. Instead, use mapreduce.task.partition
17/03/06 11:07:44 INFO deprecation: mapred.job.id is deprecated. Instead, use mapreduce.job.id
[1,leo,17]
[2,marry,17]
[3,jack,18]
[4,tom,19]
17/03/06 11:07:47 INFO RemoteActorRefProvider$RemotingTerminator: Shutting down remote daemon.
17/03/06 11:07:47 INFO RemoteActorRefProvider$RemotingTerminator: Remote daemon shut down; proceeding with flushing remote transports.
17/03/06 11:07:47 INFO RemoteActorRefProvider$RemotingTerminator: Remoting shut down.

DataFrame与RDD

1)在spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格

2)DataFrame与RDD的主要区别就是,前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型

参考资料
http://9269309.blog.51cto.com/9259309/1851673

参考资料
http://blog.csdn.net/ronaldo4511/article/details/53406069

参考资料
http://spark.apache.org/docs/latest/sql-programming-guide.html#overview

转载于:https://www.cnblogs.com/wujiadong2014/p/6516632.html

spark SQL学习(认识spark SQL)相关推荐

  1. spark代码连接hive_spark SQL学习(spark连接hive)

    spark 读取hive中的数据 scala> import org.apache.spark.sql.hive.HiveContext import org.apache.spark.sql. ...

  2. 最方便的在线Oracle SQL学习环境--Live SQL

    在线Oracle SQL学习环境--Live SQL 概述 一键开始 登录和注册 开始编写SQL之旅 Live SQL的各选项 1. SQL Worksheet 2. My Session 3. Qu ...

  3. SQL学习笔记 | 02 SQL语句结构

    SQL学习笔记 | 02 SQL语句结构 一.表的导入 1.表的命名 2.导入步骤 3.导入需注意 二.标准SQL语法 1.语句结构 2.数据表的其他关键词 3.SQL语句的分类 一.表的导入 1.表 ...

  4. Spark入门学习交流—Spark生态圈

    1.简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架.Spark在2013年 ...

  5. SQL学习指南:SQL和大数据

    由于SQL被数百万的人使用并且被集成到数千的应用程序中,因此利用SQL来处理这些数据是有意义的.在过去的几年里,涌现出了一批新的工具以支持SQL访问结构化.半结构化和非结构化的数据,这些工具包括Pre ...

  6. SQL学习-2.7 SQL聚合

    07 练习 SUM聚合函数 聚合问题 1. 算出 orders 表格中的 poster_qty 纸张总订单量. SELECT SUM(poster_qty) AS order_poster_numbe ...

  7. 【SQL学习记录】SQL Server全文本搜索

    1 全文本搜索 (Full-text Search) 1.1 全文本搜索简介 全文本搜索支持查询: 一个或多个特定单词 以特定的文本开头 特定单词的各种词性(动词.名词.形容词.进行时.过去时等) 和 ...

  8. Spark学习笔记(7)---Spark SQL学习笔记

    Spark SQL学习笔记 Spark SQL学习笔记设计到很多代码操作,所以就放在github, https://github.com/yangtong123/RoadOfStudySpark/bl ...

  9. 学习笔记Spark(七)—— Spark SQL应用(2)—— Spark DataFrame基础操作

    二.Spark DataFrame基础操作 2.1.DataFrame DataFrame是一种不可变的分布式数据集,这种数据集被组织成指定的列,类似于关系数据库中的表. 数据集的每一列都带有名称和类 ...

  10. 学习笔记Spark(六)—— Spark SQL应用(1)—— Spark SQL简介、环境配置

    一.Spark SQL简介 1.1.Spark SQL特性 Spark SQL是Spark Core之上的一个组件,它引入了一个称为SchemaRDD的新- 数据抽象,它为结构化和半结构化数据提供支持 ...

最新文章

  1. 2014年第五届蓝桥杯 - 省赛 - C/C++大学A组 - G. 蚂蚁感冒
  2. CGImageRef 图片压缩 裁减
  3. python中词云图是用来描述_python中实现词云图
  4. 【渝粤题库】陕西师范大学189101 消费者行为学Ⅰ 作业(高起专)
  5. 各种抠图动态图片_不用手。自动、智能抠图,图片去背景
  6. Hadoop入门基础教程 Hadoop之服务器基础环境搭建
  7. AngularJS消费 小计
  8. 结合CKFinder,给CKEditor加上上传图片功能
  9. 三、系统分层和分割策略
  10. stl:空间配置器的标准接口
  11. Python3----- assert(断言)
  12. Java医院网上预约挂号系统源码
  13. 晶体二极管 三极管 MOS原理
  14. 《灵飞经》②东岛门人 第四章 星隐真人
  15. centos-ssh-channel is not opened.
  16. 小红书一个月快速涨十万粉的秘籍
  17. 大学数据库创建与查询实战——查询
  18. 阿里郎组合频繁换人事出有因,艺德,人品很重要!
  19. 大菠萝 Pinia 持久化方案 Pinia Persist Own
  20. uni-app从创建到运行到微信开发者工具

热门文章

  1. AJAX POST请求中參数以form data和request payload形式在servlet中的获取方式
  2. 一些简单的Linux命令
  3. C#调用Matlab生成的dll方法
  4. 实战Makefile
  5. 线程同步--信号量内核对象
  6. 线程同步--事件内核对象
  7. Ubuntu环境下sublime3 nodejs安装与插件配置
  8. Netty工作笔记0044---scheduledTaskQueue
  9. STL之修改集合里边元素的顺序
  10. 2 image pil 转_「博文连载」RGB888转YCbCr的HDL实现