spark 基本操作(二)
1.dataframe 基本操作
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
.appName("test")
.master("local[*]")
.getOrCreate()
import spark.implicits._
val people = spark.read.format("json").load("people.json")
people.show()
/* +----+-------+
| age| name|
+----+-------+
|null|Michael|
| 30| Andy|
| 19| Justin|
+----+-------+ */
people.printSchema()
/*root
|-- age: long (nullable = true)
|-- name: string (nullable = true)*/
people.select($"name").show()
/* +-------+
| name|
+-------+
|Michael|
| Andy|
| Justin|
+-------+*/
people.select($"name", $"age".cast("string").as("age")).printSchema()
/* root
|-- name: string (nullable = true)
|-- age: string (nullable = true)*/
people.select($"name", ($"age" + ).as("age")).show()
/* +-------+----+
| name| age|
+-------+----+
|Michael|null|
| Andy| 31|
| Justin| 20|
+-------+----+*/
people.filter($"age" > ).show()
// +---+----+
// |age|name|
// +---+----+
// | 30|Andy|
// +---+----+
people.groupBy("age").count().show()
// +----+-----+
// | age|count|
// +----+-----+
// | 19| 1|
// |null| 1|
// | 30| 1|
// +----+-----+
spark.stop()
}
2.用sql 访问dataframe
val people = spark.read.format("json").load("people.json")
people.createOrReplaceTempView("tb")
spark.sql("select name,age from tb").show()
// +-------+----+
// | name| age|
// +-------+----+
// |Michael|null|
// | Andy| 30|
// | Justin| 19|
// +-------+----+
3.创建dataset
val ccDs = Seq(Person("jason",),Person("dong",)).toDS()
ccDs.select("name").show()
val pDs = Seq(,,).toDS()
pDs.map(_+).show()
pDs.printSchema()
4.反射推断模式
val spark = SparkSession.builder()
.appName("test")
.master("local[*]")
.getOrCreate()
import spark.implicits._
val sc = spark.sparkContext
val peopleDF = sc.textFile("people.txt")
.map(_.split(",", -))
.map(arr => Person(arr().trim, arr().trim.toInt))
.toDF().cache().createOrReplaceTempView("people")
val teenagerDF = spark.sql("select * from people where age between 13 and 15").cache()
teenagerDF.map(t => "name :" + t()).show()
// +-------------+
// | value|
// +-------------+
// |name :Michael|
// +-------------+
teenagerDF.map(t => "name:" + t.getAs[String]("name")).show()
// +-------------+
// | value|
// +-------------+
// |name :Michael|
// +-------------+
implicit val mapEncoder = org.apache.spark.sql.Encoders.kryo[Map[String, Any]]
teenagerDF.map(t => t.getValuesMap[Any](Seq("name", "age"))).collect().foreach(println)
// +-------------+
// | value|
// +-------------+
// |name :Michael|
// +-------------+
spark.stop()
5.通过编程指定schema来创建DF
val peopleRDD = sc.textFile("people.txt")
.map(_.split(",", -))
.map(arr => Row(arr().trim, arr().trim))
val schemaString = "name age"
val structfield = schemaString.split("\\s+")
.map(a => StructField(a, StringType, true))
val schema = StructType(structfield)
val peopleDF = spark.createDataFrame(peopleRDD, schema)
peopleDF.show()
// +-------+---+
// | name|age|
// +-------+---+
// |Michael| 15|
// | Andy| 30|
// | Justin| 19|
// +-------+---+
6.直接从file执行sql
spark.sql("select name,age from json.`people.json`").show()
// +-------+----+
// | name| age|
// +-------+----+
// |Michael|null|
// | Andy| 30|
// | Justin| 19|
// +-------+----+
7.合并schema
val squaresDF = spark.sparkContext.makeRDD( to ).map(i => (i, i * i)).toDF("value", "square")
squaresDF.write.parquet("data/test_table/key=1")
val cubesDF = spark.sparkContext.makeRDD( to ).map(i => (i, i * i * i)).toDF("value", "cube")
cubesDF.write.parquet("data/test_table/key=2")
val mergedDF = spark.read.option("mergeSchema", "true").parquet("data/test_table")
mergedDF.printSchema()
// root
// |-- value: integer (nullable = true)
// |-- square: integer (nullable = true)
// |-- cube: integer (nullable = true)
// |-- key: integer (nullable = true)
mergedDF.show()
// +-----+------+----+---+
// |value|square|cube|key|
// +-----+------+----+---+
// | 4| 16|null| 1|
// | 5| 25|null| 1|
// | 9| null| 729| 2|
// | 10| null|1000| 2|
// | 1| 1|null| 1|
// | 2| 4|null| 1|
// | 3| 9|null| 1|
// | 6| null| 216| 2|
// | 7| null| 343| 2|
// | 8| null| 512| 2|
// +-----+------+----+---+
8.dataframe 字符串拼接
val squaresDF = spark.sparkContext.makeRDD( to ).map(i => (i, i * i)).toDF("value", "square")
squaresDF.createOrReplaceTempView("vs")
squaresDF.show()
squaresDF.map{case Row(key:Int,value:Int)=>s"$key$value"}.toDF("vv").show()
spark.sql("select concat(value,square) as vv from vs").show()
spark 基本操作(二)的更多相关文章
- Spark(二)算子详解
目录 Spark(二)算子讲解 一.wordcountcount 二.编程模型 三.RDD数据集和算子的使用 Spark(二)算子讲解 @ 一.wordcountcount 基于上次的wordcoun ...
- Arduboy基本操作(二)
Arduboy基本操作(二) 方向键控制物体移动 #include<Arduboy.h> Arduboy arduboy; int i,j; void setup() { arduboy. ...
- 分别使用Hadoop和Spark实现二次排序
零.序(注意本部分与标题无太大关系,可直接调至第一部分) 既然没用为啥会有序?原因不想再开一篇文章,来抒发点什么感想或者计划了,就在这里写点好了: 前些日子买了几本书,打算学习和研究大数据方面的知识, ...
- spark的二次排序
通过scala实现二次排序 package _core.SortAndTopN import org.apache.spark.{SparkConf, SparkContext} /** * Auth ...
- 大数据入门第二十二天——spark(二)RDD算子(2)与spark其它特性
一.JdbcRDD与关系型数据库交互 虽然略显鸡肋,但这里还是记录一下(点开JdbcRDD可以看到限制比较死,基本是鸡肋.但好在我们可以通过自定义的JdbcRDD来帮助我们完成与关系型数据库的交互.这 ...
- 大数据入门第二十二天——spark(二)RDD算子(1)
一.RDD概述 1.什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的 ...
- Spark(二)CentOS7.5搭建Spark2.3.1分布式集群
一 下载安装包 1 官方下载 官方下载地址:http://spark.apache.org/downloads.html 2 安装前提 Java8 安装成功 zookeeper 安 ...
- spark streaming (二)
一.基础核心概念 1.StreamingContext详解 (一) 有两种创建StreamingContext的方式: val conf = new SparkConf().s ...
- spark 学习(二) RDD及共享变量
声明:本文基于spark的programming guide,并融合自己的相关理解整理而成 Spark应用程序总是包括着一个driver program(驱动程序),它运行着用户的main方 ...
随机推荐
- asp.net core MVC 入门学习
前言 .net core 已经更新到2.0以上的版本了,今天才开始正式接触,深为程序员,丢脸了,作为无所不能的IT人,我着手折腾一下这个跨平台的开发框架. (转载自百度百科).NET Core 是.N ...
- 轻量级ORM《sqlcommon》第一个版本发布了!!!
一.sqlcommon的特色 1. 轻量级,整个包只有123kb. 2. 性能好,自测... 3. API和功能简单.代码简短.可维护性好基本都能看懂.这个点我认为很重要,你不用为了实现一个需求而四处 ...
- linux常用命令--开发调试篇
前言 Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题.本文将简单介绍一下这些命令. 示例程序 我们用一个小程序,来 ...
- 基于DockerSwarm 部署InfluxDB并使用JAVA操作
Docker中部署InfluxDB 1.运行容器 $ docker run --rm \ -e INFLUXDB_DB=db0 -e INFLUXDB_ADMIN_ENABLED=true \ -e ...
- 初探Tomcat的架构设计
Tomcat 作为 servlet 容器实现,它是基于 Java 语言开发的轻量级应用服务器.因为 Tomcat 作为应用服务器,它有着完全开源,轻量,性能稳定,部署成本低等优点,所以它成为目前 Ja ...
- 实验吧——认真一点(绕过空格,逗号,关键字过滤等 sql盲注)
题目地址:http://ctf5.shiyanbar.com/web/earnest/index.php 过滤和拦截了某些东西,我经过多次尝试,最终构造的是 1'=(ascii(mid((select ...
- cs1.6 8倍镜
地图名字包含awp的是狙击场 打开游戏 搜索方法 开镜搜减小,关镜搜增加 分析数据 开关镜,观察数据变动 修改测试 测试结果 类似的:鼠标XY坐标,也是上减下加,左加右减
- Android 一个TextView中设置多种不同大小的字体,设置超链接
以前项目中要是遇到这样的UI设计,都是傻不拉唧的分为三个TextView来实现,今天在微信中无意中看了一篇公众号文章,发现原来只要一个TextView就可以搞定啦,人生最悲哀的事情莫过于工作了这么久啦 ...
- MySQL 重要参数 innodb_flush_log_at_trx_commit 和 sync_binlog
innodb_flush_log_at_trx_commit 主要控制了innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,取值分别为0.1.2三个.该参数控制重做日志写入 ...
- Conv2D
Conv2D keras.layers.convolutional.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', data ...