测试数据
sparkStu.text
zhangxs  chenxy
wangYr teacher
wangx teacher
sparksql
{
"name":"zhangxs","age":,"job":"chengxy",
"name":"li","age":,"job":"teacher",
"name":"tao","age":,"job":"student"
}
 
object CreateDataFream {
//创建student对象
case class Student(name:String,age:BigInt,job:String); def main(args: Array[String]){
//初始化sparkSession 这个sparkSession要用val关键字修饰
val spark = SparkSession
.builder()
.appName("Spark SQL Example")
.master("spark://服务器ip:7077")
.getOrCreate();
// runDataSetCreate(spark);
// runSarkOnFile(spark);
// applySchema(spark);
//loadParquet(spark);
//jsonFile(spark);
//销毁sparkSession
spark.stop();
} }
//对指定的列进行查询
private def test1(spark :SparkSession){
//因为要使用变量,$符号,所以导入这个包
import spark.implicits._
//从hdfs上读取json数据文件并创建dataFream
var dataFreamS= spark.read.json("hdfs://服务器ip:8020/tmp/dataTest/sparksql");
//显示dataFream所有数据
dataFreamS.show();
//打印dataFrame结构
dataFreamS.printSchema();
//显示指定列的数据
dataFreamS.select("name").show()
//查询指定的列,并修改数据
dataFreamS.select($"name", $"age"+).show();
//查询年龄大于10的人
dataFreamS.select($"age" > ).show();
//查看每个年龄段的人数
dataFreamS.groupBy("age").count();
//创建临时视图,如果这个视图已经存在就覆盖掉
dataFreamS.createOrReplaceTempView("zhangxsView");
}

//创建dataFrame并运行
private def runDataSetCreate(spark:SparkSession){
import spark.implicits._
//创建DataSets对象 类型是Student
val dataStu = Seq(Student("Andy", ,"baiLing")).toDS();
//显示数据集信息
dataStu.show();
//创建数据的dataSet
var dataArr=Seq(,,).toDS();
//显示数据集的信息
dataArr.show();
//对属性进行简单操作
print(dataArr.map (_ + ).collect());
//dataFrame能够被转换成自定义对象类型的dataSet,
val dfStu=spark.read.json("hdfs://服务器ip:8020/tmp/dataTest/sparksql").as[Student];
dfStu.show();
//jsonFile支持嵌套表,读入并注册成表
spark.read.json("hdfs://服务器ip:8020/tmp/dataTest/sparksql").registerTempTable("student");
//根据sql查询注册的table
val temsql=spark.sqlContext.sql("select name from student");
//显示name的value
print(temsql.show())
}
//从hdfs上读取数据文件并转为student对象进行操作
private def runSarkOnFile(spark:SparkSession){
import spark.implicits._
//读取数据文件 并生成rdd
var rdd=spark.read.textFile("hdfs://服务器ip:8020/tmp/dataTest/sparkStu.txt");
//对获取的rdd进行解析,并生成sutdent对象
var sturdd=rdd.map { x => x.split(" ")}.map { z => Student(z().toString(),z().toInt,z().toString())};
//显示student对象
sturdd.show();
//将sutdent对象注册成临时表 student
sturdd.registerTempTable("student");
//查询临时表中的数据,并显示
var sqlDF=spark.sql("select t.name,t.age,t.job from friend t where t.age>14 and t.age<26");
sqlDF.show();
}
private def applySchema(spark:SparkSession){
import spark.implicits._
import org.apache.spark.sql._
import org.apache.spark.sql.types._
//确定schema名称(列的名称)
var schemaString="name,age,job";
//解析schemaString,并生成StructType对象数组
var schemaType=StructType(schemaString.split(",").map { x => StructField(x,StringType,true)})
//从hdfs上读取数据文件
var stuDS=spark.sparkContext.textFile(path);
//使用Row对象,创建rowRdd
var sDS=stuDS.map { x => x.split(" ")}.map(s => Row(s(),s(),s()))
//创建schemaRDD
var rowDF=spark.createDataFrame(sDS, schemaType); // var rowDF=spark.sqlContext.applySchema(sDS, schemaType); 这种方法已经过时
//打印schemaRDD的结构
rowDF.printSchema();
//注册Student table
rowDF.createOrReplaceTempView("Student"); // rowDF.registerTempTable("Student"); 这种方法已经过时
//rowDF.collect().foreach {print(_) }
//var resDS=spark.sql("select * from Student where age > 24");
var resDS=spark.sql("select name from Student");
resDS.show();
}
 
//使用parquet文件的方式
private def loadParquet(spark:SparkSession){
import spark.implicits._
//确定schema 列名称
var schemaString="name,age,job";
//解析schemaString,并生成StructType对象数组
var schemaType=StructType(schemaString.split(",").map { x => StructField(x,StringType,true)})
//创建rowRdd
var stuDS=spark.sparkContext.textFile(path);
var sDS=stuDS.map { x => x.split(" ")}.map(s => Row(s(),s(),s()))
//将schemaRDD保存成parquet文件
var rowDF=spark.sqlContext.applySchema(sDS, schemaType);
//将文件写到hdfs://服务器ip:8020/tmp/dataTest/
rowDF.write.parquet("hdfs://服务器ip:8020/tmp/dataTest/student.parquet");
-------------------------------------------------------------------
//读取parquet文件
var redParfile=spark.read.parquet("hdfs://服务器ip:8020/tmp/dataTest/student.parquet");
redParfile.createOrReplaceTempView("redParfilered");
var resultRdd=spark.sql("select * from redParfilered t where t.name='zhangxs'");
//DataFrame.rdd 可以将dataFrame转为RDD类型
resultRdd.rdd.map { x => "name"+x() }.collect().foreach { print(_) }
} /**
* spark可以自动的识别一个json模式并加载成数据集,
* 这种转换可以使用SparkSession.read.json() 函数
* 这个数据集的来源可以是一个rdd,也可以是一个json文件
*
*/
private def jsonFile(spark:SparkSession){
var jsonRdd=spark.read.json("hdfs://192.168.177.124:8020/tmp/dataTest/sparksql");
jsonRdd.createOrReplaceTempView("student");
var jfRdd= spark.sql("select * from student t where t.age >24");
jfRdd.show();
/**
* 使用Json类型的rdd加载json
*
* 如果加:: Nil,返回是一个char类型的rdd,加上则返回的是String类型的rdd
*/
var rdd=spark.sparkContext.makeRDD("""{"name":"Yin","address":{"city":"Columbus","state":"Ohio"}}""" :: Nil);
var rddre=spark.read.json(rdd);
rddre.show();
}

spark sql的简单操作的更多相关文章

  1. 二、spark SQL交互scala操作示例

    一.安装spark spark SQL是spark的一个功能模块,所以我们事先要安装配置spark,参考: https://www.cnblogs.com/lay2017/p/10006935.htm ...

  2. SQL数据库简单操作

    sql语言简介 (1)数据库是文件系统,使用标准sql对数据库进行操作 * 标准sql,在mysql里面使用语句,在oracle.db2都可以使用这个语句 (2)什么是sql * Structured ...

  3. sql的简单操作

    mysql 一.mysql简介和安装 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应 ...

  4. Spark SQL 之 Data Sources

    #Spark SQL 之 Data Sources 转载请注明出处:http://www.cnblogs.com/BYRans/ 数据源(Data Source) Spark SQL的DataFram ...

  5. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  6. Spark SQL 官方文档-中文翻译

    Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...

  7. Spark SQL 代码简要阅读(基于Spark 1.1.0)

    Spark SQL允许相关的查询如SQL,HiveQL或Scala运行在spark上.其核心组件是一个新的RDD:SchemaRDD,SchemaRDDs由行对象组成,并包含一个描述此行对象的每一列的 ...

  8. Spark SQL Thrift Server 配置 Kerberos身份认证和权限管理

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 之前的博客介绍了通过Kerberos + Sentry的方式实现了hive server2的身份认证和权限管理功能,本文主 ...

  9. Spark SQL数据加载和保存实战

    一:前置知识详解: Spark SQL重要是操作DataFrame,DataFrame本身提供了save和load的操作, Load:可以创建DataFrame, Save:把DataFrame中的数 ...

随机推荐

  1. HDU 17新生赛 正品的概率【数论-概率论】

    正品的概率 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  2. oracle exp CONSISTENT

    exp相当于select,不会被其他操作锁定. 但是如果exp的时候指定了CONSISTENT = y,而数据库中又存在频繁修改,可能会导致exp的时候出现snapshot too old

  3. vue编程中,需要注意的

    同名情况: data() 中的数据名   和  methods()  中的方法名  不能相同. 原因:因为在vue中这两个都能用this.XX拿出来,如果写一样的,将不能分辨,计算机会默认覆盖一个. ...

  4. JAVA基础加强(张孝祥)_类加载器、分析代理类的作用与原理及AOP概念、分析JVM动态生成的类、实现类似Spring的可配置的AOP框架

    1.类加载器 ·简要介绍什么是类加载器,和类加载器的作用 ·Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader ...

  5. luogu P1182 数列分段Section II

    题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 ...

  6. ORACLE查询当前连接的用户信息及操作的SQL语句

    ORACLE--查询当前连接的用户信息及操作的SQL语句    select sid,      status,      v$session.username 用户名,      last_call ...

  7. 六. 异常处理10.Java的内置异常

    在标准包java.lang中,Java定义了若干个异常类.前面的例子曾用到其中一些.这些异常一般是标准类RuntimeException的子类.因为java.lang实际上被所有的Java程序引入,多 ...

  8. 每天一个linux命令9之crontab 定时任务

    crond 是linux用来定期执行程序的命令.当安装完成操作系统之后,默认便会启动此  任务调度命令.crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作. 1语法 ...

  9. java读取配置文件(properties)的时候,unicode码转utf-8

    有时我们在读取properties结尾的配置文件的时候,如果配置文件中有中文,那么我们读取到的是unicode码的中文,需要我们在转换一下,代码如下 /** * 将配置文件中的Unicode 转 ut ...

  10. The Art of Mocking

    One of the challenges developers face when writing unit tests is how to handle external dependencies ...