测试数据
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. Codeforces Round #444 (Div. 2)A. Div. 64【进制思维】

    A. Div. 64 time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  2. Codeforces Round #277.5 (Div. 2) B. BerSU Ball【贪心/双指针/每两个跳舞的人可以配对,并且他们两个的绝对值只差小于等于1,求最多匹配多少对】

    B. BerSU Ball time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  3. HDU 2553 N皇后问题(回溯 + 剪枝)

    本文链接:http://i.cnblogs.com/EditPosts.aspx?postid=5398797 题意: 在N*N(N <= 10)的方格棋盘放置了N个皇后,使得它们不相互攻击(即 ...

  4. 牛客网暑期ACM多校训练营(第一场) - J Different Integers(线段数组or莫队)

    链接:https://www.nowcoder.com/acm/contest/139/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...

  5. Codeforces 1028E. Restore Array

    题目直通车:http://codeforces.com/problemset/problem/1028/E 解法:设原数组为ar[],求ar中的最大值的下标ins,依次向前遍历一遍,每一个答案值都为前 ...

  6. oracle free space

    --Size of All Table Space --1. Used Space SELECT TABLESPACE_NAME,TO_CHAR(SUM(NVL(BYTES,0))/1024/1024 ...

  7. 【NOI2016】优秀的拆分

    题目描述 如果一个字符串可以被拆分为 $AABB$ 的形式,其中 $A$ 和 $B$ 是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串 aabaabaa,如果令 $A = \m ...

  8. BZOJ2038 [2009国家集训队]小Z的袜子(hose)(莫队算法)

    神奇的莫队算法,用来解决可离线无修改的区间查询问题: 首先对原序列进行分块,√n块每块√n个: 然后对所有查询的区间[l,r]进行排序,首先按l所在的块序号升序排序,如果一样就按r升序排序: 最后就按 ...

  9. 在C#中用RX库和await来实现直观的状态机

    在程序的设计过程中,我们经常会遇到一些需要使用状态机的场景,相信状态机的编写和维护是令每一个程序员都非常头大的事情.到了C# 5.0后,由于引进了await语法糖,我们可以通过await和Reacti ...

  10. Centos7.x系统优化

    1.安装常用软件 yum install tree nmap sysstat lrzsz dos2unix wget  net-tools ntpdate -y 2.配置yum源 mv /etc/yu ...