spark基础(1)

作者:神秘网友 发布时间:2021-02-23 12:50:33

spark基础(1)

将相同国家进行分组,然后将count相加sum(count), 对sum(count)进行排序,输出top5

    val path="/Volumes/Data/BigData_code/data/flight-data/csv/2015-summary.csv"
    val data = spark.read.option("inferSchema", "true").option("header", "true").csv(path)
    //查询前5个count max 的国家
    data.groupBy("DEST_COUNTRY_NAME").sum("count")
      .withColumnRenamed("sum(count)", "destination_total")
      .sort(desc("destination_total"))
      .limit(5).show()

代码的执行如图:

查看用户在一天内进行采集所用费用最多的日期:
下面是表格的格式:

    //添加一个列用于统计总费用,并查看用户话费最多的是哪个日期
    val selectData = staticData.selectExpr("CustomerId", "(UnitPrice * Quantity) as total_cost", "InvoiceDate")
    selectData.show()
    //进行分组:分组的标准:客户的ID 和 购买的时间(一天内为相同标准), 并对分组的内容进行统计
    val groupData = selectData.groupBy(
      col("CustomerId"), window(col("InvoiceDate"), "1 day")
    ).sum("total_cost")
    groupData.show(5)

window函数:https://blog.csdn.net/weixin_38653290/article/details/83962789

使用流处理实现相同功能

    //进行分组:分组的标准:客户的ID 和 购买的时间(一天内为相同标准), 并对分组的内容进行统计
    val streamData = spark.readStream.schema(staticSchema) //设置分区
      .option("maxFilesPerTrigger", 1) //设置一次读入的文件个数
      .format("csv")
      .option("header", "true")
      .load(path)
    //执行相同的逻辑操作
    val streamGroupData = streamData.selectExpr(
      "CustomerId", "(UnitPrice * Quantity) as total_cost", "InvoiceDate"
    ).groupBy(
      $"CustomerId", window($"InvoiceDate", "1 day")
    ).sum("total_cost")

注意由于流处理和静态处理不一样,所以无法使用静态处理中的动作操作。流处理是将流处理的结果放入内存的一个表中。每一次处理完,不断的更新这个表即可

    //将结果存入内存中
    streamGroupData.writeStream.format("memory")    //表示存入内存中
      .queryName("streamGroupData")     //表示存入内存的表的名字
      .outputMode("complete")     //complete表示表中所有记录
      .start()

然后查询

    //对流处理后的结果进行查询
    spark.sql(
      """
        |select *
        |from streamGroupData
        |order by 'sum(total_cost)' desc
        |""".stripMargin).show(5)

spark基础(1) 相关文章

  1. java设计模式基础--拦截器

    由于动态代理一般比较难理解,一般都会设计一个拦截器接口供开发者使用,这样开发者就只用知道拦截器接口的方法,含义和作用即可,无须知道动态代理是怎么实现的。 以下代码用JDK动态代理来实现一个拦截器的逻辑。 一,定义拦截器接口: package intercept;i

  2. 不可不知的 JVM 预热

    一、JVM 架构基础 JVM进程启动时,ClassLoader 会将需要的所有类加载到内存,主要分为以下三步: Bootstrap Class: 核心类库,由“ Bootstrap Class Loader ”负责加载,例如基础的运行时类库 JRE\lib\rt.jar 。 Extension Class : java.ext.dirs 路径下的类

  3. 一些省选中较为基础的数学知识笔记

    之前那个任务计划太乱了 决定把数学的单独分出来 之后可能也会把其它的分出来,然后计划里只剩链接就好了 拉格朗日插值 「TJOI2018」教科书般的亵渎 模板题 杀死所有怪物需要$m+1$张“亵渎” $f(n)=\sum_{i=1}^{n+1}i^{m+1}$为$m+2$次多项式 每次取$m+3$个点

  4. JS相关基础(上)

    1. ES5和ES6继承方式区别 ES5定义类以函数形式, 以prototype来实现继承 ES6以class形式定义类, 以extend形式继承 2. Generator了解 ES6 提供的一种异步编程解决方案, Generator 函数是一个状态机,封装了多个内部状态。 function* helloWorldGenerator() { y

  5. Latex-基础功能(一)

    Latex 作为论文神器Latex,这里也少不了关于它的介绍。 为什么说Latex是论文神器呢 因为,如果你有过word或WPS编辑论文的经历就会知道,用这两个大家伙来编辑数学公式是异常复杂的,数不尽的希腊字母和一些你读都读不出来的数学符号,真的会让人绝望。(我曾

  6. Android开发基础不牢这是一份用心整理的Android面试总结,持续更新中

    前言 这篇文章主要是分享今年面试心得,现已就职于某大厂有三个月了,近期有很多公司均已启动秋招,也祝大家面试顺利,获得理想的offer! 之前找工作的那段时间感想颇多,总结一点面试经验和人生思考分享给大家。 今天本文主要讲解: APK文件反编译 什么是反

  7. 2021牛客寒假算法基础集训营5 B. 比武招亲(上)(排列组合)

    链接:https://ac.nowcoder.com/acm/contest/9985/B 来源:牛客网 题目描述 众所周知,天姐姐只喜欢天下最聪明的人,为了找到这样的人,她决定比武招亲! 只见天姐姐在榜上留下了这样一道问题,谁做出来了就可以俘获她的芳心! 爱慕天姐姐已久的泽鸽鸽问询赶

  8. 2021牛客寒假算法基础集训营5 D. 石子游戏(差分/贪心)

    链接:https://ac.nowcoder.com/acm/contest/9985/D 来源:牛客网 题目描述 叶妹妹很喜欢玩石头,于是这天泽鸽鸽给她出了一道石子游戏,规则是这样的:有n堆石子排成一行,其中第i堆石子有ai个,叶妹妹可以选择做无数次这种操作:每次操作把连续相邻的k个石

  9. mysql使用总结

    一、MySQL基础数据类型 1.数值数据类型 MySQL的数值数据类型支持SQL标准的数值类型,其中包括精确数值数据类型(INTEGER, SMALLINT, DECIMAL)和近似数值数据类型(FLOAT, REAL, and DOUBLE) 1.1精确整数数值类型 MySQL支持SQL标准的 INTEGER (or INT) 和SM

  10. java基础语法、数据类型、数据类型扩展

    java基础语法 java注释有三种 单行注释: // 注释 多行注释: /* 注释 */ 文档注释:javaDoc /** @注释 */ 标识符 关键字 java所有的组成部分都需要名字,类名、变量名以及方法名都被称为标识符。 标识符注意点 所有的标识符都u应该以字母(A-Z或a-z)、美元符

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词