一个spark SQL和DataFrames的故事
package com.lin.spark
import org.apache.spark.sql.{Row, SparkSession}
import org.apache.spark.sql.types.{StringType, StructField, StructType}
/**
* Created by Yaooo on 2019/6/8.
*/
object SparkSQLExample {
case class Person(name:String,age:Long)
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("Spark SQL")
.config("spark.come.config.option","some-value")
.master("local[2]")
.getOrCreate()
runBasicDataFrameExample(spark)
runDatasetCreationExample(spark)
runInferSchemaExample(spark)
runProgrammaticSchemaExample(spark)
}
private def runProgrammaticSchemaExample(spark:SparkSession): Unit ={
import spark.implicits._
val personRDD = spark.sparkContext.textFile("src/main/resources/people.txt")
val schemaString = "name age"
val fields = schemaString.split(" ")
.map(fieldName => StructField(fieldName, StringType, nullable = true))
val schema = StructType(fields)
val rowRDD = personRDD
.map(_.split(","))
.map(att => Row(att(0),att(1).trim))
val peopleDF = spark.createDataFrame(rowRDD,schema)
peopleDF.createOrReplaceTempView("people")
val results = spark.sql("select * from people")
results.map(att=>"Name : "+att(0)).show()
}
private def runInferSchemaExample(spark:SparkSession): Unit ={
import spark.implicits._
val personDF = spark.sparkContext
.textFile("src/main/resources/people.txt")
.map(_.split(","))
.map(attributes => Person(attributes(0),attributes(1).trim.toInt))
.toDF()
personDF.createOrReplaceTempView("people")
val teenagersDF = spark.sql("select * from people where age between 13 and 19")
teenagersDF.show()
teenagersDF.map(teenager =>"name: "+teenager(0)).show()
teenagersDF.map(teenager => "Name: "+ teenager.getAs[String]("name")).show()
implicit val mapEncoder = org.apache.spark.sql.Encoders.kryo[Map[String, Any]]
teenagersDF.map(teenager => teenager.getValuesMap[Any](List("name","age"))).collect()
.foreach(println)
}
private def runDatasetCreationExample(spark:SparkSession): Unit ={
import spark.implicits._
val caseClassDS = Seq(Person("Andy",18)).toDF()
caseClassDS.show()
val primitiveDS = Seq(1, 2, 3).toDS()
primitiveDS.map(_+1).collect().foreach(println)
val path = "src/main/resources/person.json"
val personDS = spark.read.json(path).as[Person]
personDS.show()
}
private def runBasicDataFrameExample(spark:SparkSession): Unit ={
import spark.implicits._
val df = spark.read.json("src/main/resources/person.json")
df.show()
df.printSchema()
df.select("name").show()
df.select($"name",$"age"+1).show()
df.filter($"age">21).show()
df.groupBy($"age").count().show()
/*df.createOrReplaceTempView("people")
val sqlDF = spark.sql("select * from people")
sqlDF.show()*/
df.createOrReplaceGlobalTempView("people")
spark.sql("select * from global_temp.people").show()
}
}
一个spark SQL和DataFrames的故事的更多相关文章
- Spark 官方文档(5)——Spark SQL,DataFrames和Datasets 指南
Spark版本:1.6.2 概览 Spark SQL用于处理结构化数据,与Spark RDD API不同,它提供更多关于数据结构信息和计算任务运行信息的接口,Spark SQL内部使用这些额外的信息完 ...
- Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN
Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession ...
- Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets
Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession ...
- Spark SQL 之 Migration Guide
Spark SQL 之 Migration Guide 支持的Hive功能 转载请注明出处:http://www.cnblogs.com/BYRans/ Migration Guide 与Hive的兼 ...
- Spark SQL 官方文档-中文翻译
Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...
- Spark SQL官方文档阅读--待完善
1,DataFrame是一个将数据格式化为列形式的分布式容器,类似于一个关系型数据库表. 编程入口:SQLContext 2,SQLContext由SparkContext对象创建 也可创建一个功能更 ...
- spark SQL (二) 聚合
聚合内置功能DataFrames提供共同聚合,例如count(),countDistinct(),avg(),max(),min(),等.虽然这些功能是专为DataFrames,spark SQL还拥 ...
- Spark1.0新特性-->Spark SQL
Spark1.0出来了,变化还是挺大的,文档比以前齐全了,RDD支持的操作比以前多了一些,Spark on yarn功能我居然跑通了.但是最最重要的就是多了一个Spark SQL的功能,它能对RDD进 ...
- Spark SQL概念学习系列之如何使用 Spark SQL(六)
val sqlContext = new org.apache.spark.sql.SQLContext(sc) // 在这里引入 sqlContext 下所有的方法就可以直接用 sql 方法进行查询 ...
随机推荐
- 67.Task Scheduler(任务规划)
Level: Medium 题目描述: Given a char array representing tasks CPU need to do. It contains capital letter ...
- jquery的扩展,及编辑插件的书写格式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- redhat6.5单用户重置root密码
(1),按 “e” 键进入该界面,继续按 “e” 键进入下一个界面. (2).上下键选中第二个kernel选项,继续按 “e” 键进行编辑. (3).在新的界面里面加一个空格,再输入“1”:或者输入“ ...
- 分析abex'crackme#2
文件地址:https://www.wocloud.com.cn/webclient/share/sindex.action?id=i9K_Br6TgE4gbyGIlYkffWKcRy5TUdZ8U6_ ...
- js操作对象属性用点和用中括号有什么不同
书读百遍其义自见 学习<JavaScript设计模式>一书时,学习工厂模式这一章节,发现了对象后使用中括号的情况,如下: var Factory=function(type,content ...
- js事件循环了解一下
https://segmentfault.com/a/1190000019900532
- CSS-01 CSS代码标准和规范
一:代码规范 1.所有的书写都是在英文半角下进行 2.统一用table键进行缩进 3.属性值必须带引号(单引和双引都可以) 4.p,dt,h标签里不能嵌套块属性标签 5.a标签不能嵌套a 二:文件命名 ...
- 关于WTSAPI32
一般在windows编程都是用用从ntdll导出的Native API,现在看到一点COM编程或者其他的一些不常用的接口函数总觉得蛮有意思,准备以后多积累一下. 先简单总结WTSAPI32.以下实在W ...
- linux 性能测试之基准测试工具
https://niyunjiu.iteye.com/blog/316302 system: lmbench unixbench5.1.2 ubench freebench nbench ltp xf ...
- 非阻塞套接字与IO多路复用(转,python实现版)
非阻塞:指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回.epoll工作在非阻塞模式时,才会发挥作用. 我们了解了socket之后已经知道,普通套接字实现的服务端的缺陷:一次只能服务一个 ...