IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> spark开窗函数的两种写法 -> 正文阅读

[大数据]spark开窗函数的两种写法

内容

package TEST

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.{desc, row_number}
import org.apache.spark.sql.{Row, SparkSession}
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}

object Test2 {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().appName("rank")
      .master("local[*]").enableHiveSupport().getOrCreate()

    import spark.implicits._

    /**
      * 造数据
      */
    val array = Array("1,xgs,22", "2,ls,23", "2,ww,18", "3,wemz,17", "3,zy,16", "4,lb,25", "5,zf,26", "6,gy,27")

    val rdd = spark.sparkContext.parallelize(array).map { row =>
      val Array(id, name, age) = row.split(",")
      Row(id, name, age.toInt)
    }

    val structType = new StructType(Array(
      StructField("id", StringType, true),
      StructField("name", StringType, true),
      StructField("age", IntegerType, true)
    ))
    val df = spark.createDataFrame(rdd, structType)
    df.show()

    //sql风格
    df.createTempView("tmp")
    spark.sql("select id,name,age, row_number() over (partition by id order by age desc) top from tmp").show()

    //DSL风格
    df.withColumn("rk", row_number().over(Window.partitionBy("id").orderBy(desc("age"))))
      .where($"rk" <= 1)
      .drop("rk")
      .show()

  }
}

结果

原始数据
+---+----+---+
| id|name|age|
+---+----+---+
|  1| xgs| 22|
|  2|  ls| 23|
|  2|  ww| 18|
|  3|wemz| 17|
|  3|  zy| 16|
|  4|  lb| 25|
|  5|  zf| 26|
|  6|  gy| 27|
+---+----+---+

SQL风格
+---+----+---+---+
| id|name|age|top|
+---+----+---+---+
|  3|wemz| 17|  1|
|  3|  zy| 16|  2|
|  5|  zf| 26|  1|
|  6|  gy| 27|  1|
|  1| xgs| 22|  1|
|  4|  lb| 25|  1|
|  2|  ls| 23|  1|
|  2|  ww| 18|  2|
+---+----+---+---+

DSL风格
+---+----+---+
| id|name|age|
+---+----+---+
|  3|wemz| 17|
|  5|  zf| 26|
|  6|  gy| 27|
|  1| xgs| 22|
|  4|  lb| 25|
|  2|  ls| 23|
+---+----+---+
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:30:56  更:2021-08-31 15:32:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:49:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码