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方 ...
随机推荐
- DP之背包
一.01背包: (以下均可用一维来写 即只能选择一次的物品装在一定容积的背包中.f[i][j]表示前i件物品在容积为j时的最大价值. for(int i = 1; i <= n ; i++){ ...
- python基础知识(最基本)
保留字(关键字) False None True and as break class continue def elif else except finally for from global ...
- 遇到了Microsoft Visual Studio is Busy!
最近两天,我点击F5进入调试模式,VS左下角状态显示一直在加载符号文件,然后加载的超级慢,不多一会儿,显示VS正忙!如上图所示. 然后的然后,VS就卡死了~~~.之后,在网上查找原因和解决办法,找来找 ...
- i春秋——“百度杯”CTF比赛 九月场——Test(海洋cms / seacms 任意代码执行漏洞)
打开发现是海洋cms,那就搜索相关漏洞 找到一篇介绍海洋cms的命令执行漏洞的文章:https://www.jianshu.com/p/ebf156afda49 直接利用其中给出的poc /searc ...
- WorkFlow四:添加用户决策步骤
沿用之前的例子,做个用户决策步骤. 1.事物代码SWDD: 进入抬头,点击类的绑定按钮. 2.选择类的绑定,点击继续. 这是类的绑定已经变色了.这时候点击保存,再点击返回到图片逻辑流界面. 3.在发送 ...
- C++ OpenSSL 之三:生成CSR文件
1.等同于使用: openssl req -new -key "key_path" -out "save_path" -subj "/emailAdd ...
- PS下修改背景色
1.打开要修改的图片 2.选择左侧的快速选择工具,右键选择魔法棒 3.在图片上点击左键选取背景 4.菜单栏选择编辑,点击填充 5.在填充选项框中选择“颜色",点击选取要使用的颜色,确定
- pg 数据库操作
一.pg数据库修改操作 Insert into table (key) values (value) on conflict(主键) do update set key=value; 修改的 valu ...
- 201871010121 王方 《面向对象程序设计(java)》 第二周学习总结
这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11475 ...
- 访问控制 RAM(Resource Access Management),知识点
资料 网址 什么是访问控制 https://help.aliyun.com/document_detail/28672.html?spm=5176.11065259.1996646101.search ...