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 基本操作(二)的更多相关文章

  1. Spark(二)算子详解

    目录 Spark(二)算子讲解 一.wordcountcount 二.编程模型 三.RDD数据集和算子的使用 Spark(二)算子讲解 @ 一.wordcountcount 基于上次的wordcoun ...

  2. Arduboy基本操作(二)

    Arduboy基本操作(二) 方向键控制物体移动 #include<Arduboy.h> Arduboy arduboy; int i,j; void setup() { arduboy. ...

  3. 分别使用Hadoop和Spark实现二次排序

    零.序(注意本部分与标题无太大关系,可直接调至第一部分) 既然没用为啥会有序?原因不想再开一篇文章,来抒发点什么感想或者计划了,就在这里写点好了: 前些日子买了几本书,打算学习和研究大数据方面的知识, ...

  4. spark的二次排序

    通过scala实现二次排序 package _core.SortAndTopN import org.apache.spark.{SparkConf, SparkContext} /** * Auth ...

  5. 大数据入门第二十二天——spark(二)RDD算子(2)与spark其它特性

    一.JdbcRDD与关系型数据库交互 虽然略显鸡肋,但这里还是记录一下(点开JdbcRDD可以看到限制比较死,基本是鸡肋.但好在我们可以通过自定义的JdbcRDD来帮助我们完成与关系型数据库的交互.这 ...

  6. 大数据入门第二十二天——spark(二)RDD算子(1)

    一.RDD概述 1.什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的 ...

  7. Spark(二)CentOS7.5搭建Spark2.3.1分布式集群

    一 下载安装包 1 官方下载 官方下载地址:http://spark.apache.org/downloads.html 2  安装前提 Java8         安装成功 zookeeper  安 ...

  8. spark streaming (二)

    一.基础核心概念 1.StreamingContext详解 (一) 有两种创建StreamingContext的方式:             val conf = new SparkConf().s ...

  9. spark 学习(二) RDD及共享变量

    声明:本文基于spark的programming guide,并融合自己的相关理解整理而成      Spark应用程序总是包括着一个driver program(驱动程序),它运行着用户的main方 ...

随机推荐

  1. innodb和myisam对比

    MyISAM特点 1)不支持行锁(MyISAM只有表锁),读取时对需要读到的所有表加锁,写入时则对表加排他锁: 2)不支持事务 3)不支持外键 4)不支持崩溃后的安全恢复 5)在表有读取查询的同时,支 ...

  2. 在React中写一个Animation组件,为组件进入和离开加上动画/过度

    问题 在单页面应用中,我们经常需要给路由的切换或者元素的挂载和卸载加上过渡效果,为这么一个小功能引入第三方框架,实在有点小纠结.不如自己封装. 思路 原理 以进入时opacity: 0 --> ...

  3. Gin-Go学习笔记八:Gin-Web框架 常用的包

    常用的包 1>     在java,.net,php,node.js等语言常常会使用到包的概念.包的使用,可以加快项目的进度的开发,以及更好的实现项目的效果.我在网上查到了包的作用如下: 1.包 ...

  4. Python渗透测试工具库

    漏洞及渗透练习平台 WebGoat漏洞练习平台: https://github.com/WebGoat/WebGoat webgoat-legacy漏洞练习平台: https://github.com ...

  5. tp5.0在控制器中和在模板中调用配置文件中的常量

    框架配置文件config.php中定义 'view_replace_str'  =>  [ '__MEMBER__'=> '/static/member',         '__uplo ...

  6. vue+element 获取验证码

    我们在做一个项目,登录注册页面是少不了的,为了人机校验,验证码也是必须的 我的这个项目获取验证码,前端发送一个随机四位数给后端,后端返回一张图片,前端渲染就可以 template代码: <el- ...

  7. Es6学习指南-1-函数变量

    本篇章我们简述的是 es6初级知识点,认识es6,以及es6变量和es5的变量和函数. ECMAScript  6简介 ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代 ...

  8. ECharts学习指南

    1.了解ECharts ECharts简单说就是互联网开发程序过程中,后台数据库用以实现数据到图形的映射的一个插件. 具体来说一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在PC和 ...

  9. Pods应用NFS存储

    Volumes选择NFS服务器: 条件: 1. k8s集群,目前为(hadoop1,hadoop2,hadoop3) 2. 另起一台服务器做专门的NFS服务器 3. NFS需要在K8S的各个节点安装 ...

  10. PHP redis 常用操作

    //在列表头部插入一个值one,当列表不存在时自动创建一个列表,key1为列表名 $redis->lpush("key1", "one"); //在列表尾 ...