专业集团门户网站建设方案,wordpress文章管理模板下载,网站制作报价doc,服装网站建设策划目录前言#xff1a;1、Spark SQL1.1、Spark SQL概述1.2、DataFrames1.3、DataFrame常用操作 总结#xff1a; 目录
前言#xff1a;
本文主要介绍下SparkSQL以及SparkSQL的简单使用。这里只是做了一个非常简单的介绍#xff0c;后续工作中如果有用到相关的知识#xff…目录前言1、Spark SQL1.1、Spark SQL概述1.2、DataFrames1.3、DataFrame常用操作 总结 目录
前言
本文主要介绍下SparkSQL以及SparkSQL的简单使用。这里只是做了一个非常简单的介绍后续工作中如果有用到相关的知识我会再总结。
1、Spark SQL
1.1、Spark SQL概述
1.1.1、什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。
1.1.2、为什么要学习Spark SQL 我们已经学习了Hive它是将Hive SQL转换成MapReduce然后提交到集群上执行大大简化了编写MapReduce的程序的复杂性由于MapReduce这种计算模型执行效率比较慢。所有Spark SQL的应运而生它是将Spark SQL转换成RDD然后提交到集群执行执行效率非常快 1.易整合 2.统一的数据访问方式 3.兼容Hive 4.标准的数据连接
1.2、DataFrames
1.2.1、什么是DataFrames 与RDD类似DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格除了数据以外还记录数据的结构信息即schema。同时与Hive类似DataFrame也支持嵌套数据类型struct、array和map。从API易用性的角度上 看DataFrame API提供的是一套高层的关系操作比函数式的RDD API要更加友好门槛更低。由于与R和Pandas的DataFrame类似Spark DataFrame很好地继承了传统单机数据分析的开发体验。 1.2.2、创建DataFrames 在Spark SQL中SQLContext是创建DataFrames和执行SQL的入口在spark-1.5.2中已经内置了一个sqlContext。
1.在本地创建一个文件有三列分别是id、name、age用空格分隔然后上传到hdfs上
hdfs dfs -put person.txt /
2.在spark shell执行下面命令读取数据将每一行的数据使用列分隔符分割
val lineRDDsc.textFile(hdfs://node1.itcast.cn:9000/person.txt).map(_.split( ))3.定义case class相当于表的schema
case class Person(id:Int, name:String, age:Int)
4.将RDD和case class关联
val personRDD lineRDD.map(x Person(x(0).toInt, x(1), x(2).toInt))
5.将RDD转换成DataFrame
val personDF personRDD.toDF
6.对DataFrame进行处理
personDF.show 1.3、DataFrame常用操作
1.3.1、DSL风格语法
//查看DataFrame中的内容
personDF.show//查看DataFrame部分列中的内容
personDF.select(personDF.col(name)).show
personDF.select(col(name), col(age)).show
personDF.select(name).show//打印DataFrame的Schema信息
personDF.printSchema
//查询所有的name和age并将age1
personDF.select(col(id), col(name), col(age) 1).show
personDF.select(personDF(id), personDF(name), personDF(age) 1).show //过滤age大于等于18的
personDF.filter(col(age) 18).show //按年龄进行分组并统计相同年龄的人数
personDF.groupBy(age).count().show() 1.3.2、SQL风格语法 如果想使用SQL风格的语法需要将DataFrame注册成表
personDF.registerTempTable(t_person)//查询年龄最大的前两名
sqlContext.sql(select * from t_person order by age desc limit 2).show //显示表的Schema信息
sqlContext.sql(desc t_person).show 总结
对于SparkSQL来说目前博主也只是做了一个简单的了解。希望各位通过该文章能学到以下几点 1、知道SparkSQL内部是将对应的SQL转换为RDD来处理的。 2、知道SparkSQL是什么以及有什么优缺点。 3、最重要的一点是知道SparkSQL一些常用的操作。