Spark小课堂Week3 FirstSparkApp(Dataframe开发)

时间:2022-10-13 12:21:58

Spark小课堂Week3 FirstSparkApp(代码优化)

RDD代码简化

对于昨天练习的代码,我们可以从几个方面来简化:

  1. 使用fluent风格写法,可以减少对于中间变量的定义。
  2. 使用lambda表示式来替换对象写法,可以使用到类型推断功能,减少对于类型的定义。

优化后代码如下:

        return this.getInputRDD(PracticePojo.class)
.mapToPair(
practicePojo -> new Tuple2<>(practicePojo.getSecurityId(), 1))
.reduceByKey(
(v1, v2) -> v1 + v2)
.mapToPair(
tuple -> new Tuple2<>(tuple._2, tuple._1))
.sortByKey(false)
.map(
v1 -> {
PracticeResultPojo resultPojo = new PracticeResultPojo();
resultPojo.setSecurityId(v1._2);
resultPojo.setCount(v1._1);
return resultPojo;
});

Dataframe开发

在RDD的开发中,有几点问题:

  1. api语法较偏技术风格,相比于sql等语法来说更为底层,理解难度较高。
  2. 我们会发现由于RDD本身并没有固定结构,所以会使用泛型特性,引入外部结构来进行处理,这个导致了在处理过程中会涉及到大量类型相关的操作,从而增加了代码的复杂度。

所以,Spark引入了第二代api:Dataframe。

  1. Dataframe可以理解为一个有结构的RDD,其结构是内化的,不需要引入外部结构。
  2. 通过Dataframe的特性非常类似数据库的表,所以直接实现了很多数据库的操作。

练习题目

进行dataframe练习

  1. 读取交易记录
  2. 按照fundCode+securityId进行分组
  3. 对每个分组内的quantity进行汇总
  4. 输出结果

有两种写法:

写法1:

        return this.getInputDataFrame(PracticePojo.class)
.groupBy("fundCode", "securityId")
.sum("quantity")
.toDF("fundCode", "securityId", "quantity");

调用dataframe的api来进行开发,我们可以发现其api比较类似sql语法的算子,api也非常的简明。相比于RDD开发,有了比较大的简化。

写法2:

    return runSparkSql("select fundcode fundCode,securityid securityId,sum(quantity) quantity\n " +
" from p_table \n" +
" group by fundcode,securityid");

直接使用sql语句来开发,相比于api方式,其优点在于语法表现力更丰富,贴近原先开发习惯。

问题是:

  1. 因为sql语句是字符串,如有编写无法在编译时给出提示,只有在运行时才能知道异常。
  2. Spark支持的SQL语法不全。

小结

我们一共介绍了RDD和Dataframe两大类开发方式,各有两种开发方法:

  1. RDD编程
    • 以对象方式传递逻辑,操作最傻瓜,代码较长,可读性差。
    • 以lambda表达式传递逻辑,需要有一定的理解记忆,代码简洁,推荐使用。
  2. Dataframe编程
    • api方式编码,相比于RDD的api更为简洁,但由于进行了封装,功能会薄弱一些。
    • 调用sql语句,但是由于sql语句是字符串,可读性和可调试性较差,胜在表达能力强,并可以直接从现有系统迁移,对于存量系统迁移,推荐使用。

关于

小课堂是在公司进行内部交流的一系列主题,偏基础,但是比较零散,持续更新中。

Spark小课堂Week3 FirstSparkApp(Dataframe开发)的更多相关文章

  1. Spark小课堂Week3 FirstSparkApp&lpar;RDD开发&rpar;

    Spark小课堂Week3 FirstSparkApp 问题:Java有哪些数据结构 大致有如下几种,其中List与Map是最重要的: List Map Set Array Heap Stack Qu ...

  2. Spark小课堂Week5 Scala初探

    Spark小课堂Week5 Scala初探 Scala是java威力加强版. 对Java的改进 这里会结合StreamingContext.scala这个代码说明下对Java的改进方面. 方便测试方式 ...

  3. Spark小课堂Week2 Hello Streaming

    Spark小课堂Week2 Hello Streaming 我们是怎么进行数据处理的? 批量方式处理 目前最常采用的是批量方式处理,指非工作时间运行,定时或者事件触发.这种方式的好处是逻辑简单,不影响 ...

  4. Spark小课堂Week1 Hello Spark

    Spark小课堂Week1 Hello Spark 看到Spark这个词,你的第一印象是什么? 这是一朵"火花",官方的定义是Spark是一个高速的.通用的.分布式计算系统!!! ...

  5. Spark小课堂Week7 从Spark中一个例子看面向对象设计

    Spark小课堂Week7 从Spark中一个例子看面向对象设计 今天我们讨论了个问题,来设计一个Spark中的常用功能. 功能描述:数据源是一切处理的源头,这次要实现下加载数据源的方法load() ...

  6. Spark小课堂Week6 启动日志详解

    Spark小课堂Week6 启动日志详解 作为分布式系统,Spark程序是非常难以使用传统方法来进行调试的,所以我们主要的武器是日志,今天会对启动日志进行一下详解. 日志详解 今天主要遍历下Strea ...

  7. Spark小课堂Week4 从控制台看Spark逻辑结构

    Spark小课堂Week4 从控制台看Spark逻辑结构 层级关系: 从监控控制台,我们可以看到如下关系: 一个 Job 包含 n Stage 一个 Stage 包含 n Task Job0解决什么问 ...

  8. 小课堂Week9 例外处理设计的逆袭Part2

    小课堂Week9 例外处理设计的逆袭Part2 今天继续阅读<例外处理设计的逆袭>这本书,我们先看两个案例: 案例1 问:如果要设计一个依据学号到数据库中查询学生资料的函数,当找不到符合条 ...

  9. 【转载】Spark SQL 1&period;3&period;0 DataFrame介绍、使用

    http://www.aboutyun.com/forum.php?mod=viewthread&tid=12358&page=1 1.DataFrame是什么?2.如何创建DataF ...

随机推荐

  1. webstorm抽取函数

    webstrom 1.extact 抽取函数:选中代码,右键,refactor-extact function matchPicLink() { var $match = $('#match'); v ...

  2. 11 个 Linux 上最佳的图形化 Git 客户端

    Git是软件开发和若干其他版本控制任务免费和开源的分布式版本控制系统.它被设计用来以应付一切从小到非常大的项目,基于速度,效率和数据完整性. Linux用户主要通过命令行管理Git,不过,一些图形用户 ...

  3. mysql&plus;keepalived主从切换脚本 转

    Keepalived MySQL故障自动切换脚本   MySQL架构为master-slave(主从),master故障自动切换到slave上.当然也可以设置为双master,但这里有个弊端:就是当主 ...

  4. JVM学习笔记(一)------基本结构【转】

    转自:http://blog.csdn.net/cutesource/article/details/5904501 版权声明:本文为博主原创文章,未经博主允许不得转载. 从Java平台的逻辑结构上来 ...

  5. SetBkMode可设置文字背景色:TRANSPARENT或OPAQUE

    感受一下区别: procedure TForm1.Timer2Timer(Sender: TObject); var cvs: TCanvas; Rect: TRect; Str: string; b ...

  6. Binary Tree Inorder Traversal&lpar;转&rpar;

    Given a binary tree, return the inorder traversal of its nodes' values. For example: Given binary tr ...

  7. Spring Security 入门(1-6-1)Spring Security - 配置文件解析和访问请求处理

    1.在pom.xml中添加maven坐标 <dependency> <groupId>org.springframework.security</groupId> ...

  8. spring boot整合servlet、filter、Listener等组件方式

    创建一个maven项目,然后此项目继承一个父项目:org.springframework.boot 1.创建一个maven项目: 2.点击next后配置父项目及版本号 3.点击finish后就可查看p ...

  9. js点击回到顶部

    ---恢复内容开始--- <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  10. 解决在Windows10没有修改hosts文件权限

    当遇到有hosts文件不会编辑或者,修改了没办法保存”,以及需要权限等问题如图: 我学了一招,先在交给你: 1.win+R 2.进入hosts的文件所在目录: 3.我们开始如何操作才能不出现权限问题那 ...