Spark大部分转化操作和一部分行动操作,都需要依赖开发人员传递的函数进行计算。在Spark支持的3种开发语言(Java、Python、Scala)里,传递的方式略有不同。下面苦李介绍Java如何向Spark传递函数。

1、标准接口

在Java中,函数需要作为实现了Spark的org.apache.spark.api.java.function包中的任一函数接口的对象来传递。根据不同的返回类型,我们定义了一些不同的接口。

下面是标准的Java函数接口:函数名实现方法用途FunctionR call(T)接收一个输入值,并返回一个输出值,用于类似map()和filter()等操作中

Function2R call(T1, T2)接收两个输入值,并返回一个输出值,用于类似aggregate()和fold()等操作中

FlatMapFunctionIterable call(T)接收一个输入值,并返回任意个输出值,用于类似flatMap()等操作中

2、传递方法

在Java里,我们可以通过匿名内部类、具名类和lambda(java8中)的方式进行函数传递,下面通过统计日志文件中的404请求,依次给出代码示例。

(1)在java中使用匿名内部类进行函数传递JavaRDD lines = spark.read().textFile(args[0]).javaRDD();

JavaRDD lines_404 = lines.filter(

new Function() {

@Override

public Boolean call(String s) throws Exception {

return s.contains("404");

}

}

);

System.out.println(":::: 404 lines count: " + lines_404.count());

(2)在java中使用具名类进行函数传递JavaRDD lines = spark.read().textFile(args[0]).javaRDD();

class Contains_404 implements Function {

public Boolean call(String x) {

return x.contains("404");

}

}

JavaRDD lines_404 = lines.filter(new Contains_404());

System.out.println(":::: 404 lines count: " + lines_404.count());

具体使用哪种方式可以根据自己的编程习惯进行选择,苦李建议大家在大型项目中最好使用具名类的方式进行参数传递,这种方式可以让我们的代码更加清晰,提升可读性,而且这种方式可以让我们在构造函数中添加参数。

例如,修改过的代码:class Contains_404 implements Function {

private String query_str;

private Contains_404(String query_str){

this.query_str = query_str;

}

public Boolean call(String x) {

return x.contains(query_str);

}

}

JavaRDD lines_404 = lines.filter(new Contains_404("404"));

System.out.println(":::: 404 lines count: " + lines_404.count());

(3)在Java8中,还可以通过lambda的方式进行函数传递

在java8里,我们还可以通过lambda的方式进行函数传递,上述代码可精简如下:JavaRDD lines = spark.read().textFile(args[0]).javaRDD();

JavaRDD lines_404 = lines.filter(s -> s.contains("404"));

System.out.println(":::: 404 lines count: " + lines_404.count());

java spark 教程_Spark基础教程——向Spark传递函数(Java篇)相关推荐

  1. java.util.logging.Logger基础教程

    java.util.logging.Logger基础教程 @(JAVA)[java] 从JDK1.4开始即引入与日志相关的类java.util.logging.Logger,但由于Log4J的存在,一 ...

  2. java清华大学教程_清华大学出版社-图书详情-《Java Web应用开发基础教程》

    目录                                                  ...

  3. 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)

    黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...

  4. 全国电子商务人才专业化从业认证考试初级教程(公共基础教程)(全国电子商务人才丛业能力教育指定教材)

    书名:<全国电子商务人才专业化从业认证考试初级教程(公共基础教程)>(全国电子商务人才丛业能力教育指定教材) 作者:单兴华 组编:全国电子商务人才从业能力教育项目管理办公室 出版社:中国人 ...

  5. [转载]VBS入门教程 VBS基础教程

    [转载]VBS入门教程 VBS基础教程(收藏) VBS基础教程 VBS(VBScript的进一步简写)是基于Visual Basic的脚本语言. Microsoft Visual Basic是微软公司 ...

  6. 14-(基础入门篇)关于系统教程和基础教程后期规划

    https://www.cnblogs.com/yangfengwu/p/9966901.html 系统教程:现在的系统教程已经写完源码,还没配教程,现在买只能给源码哈 系统教程初步要做到的就是12节 ...

  7. Alibaba开源Java诊断利器Arthas基础教程

    Arthas 是Alibaba开源的Java诊断工具. 官网:官网 文档:文档 github: github地址 准备工作 准备arthas 先在进入文档下载arthas的jar包:如图 下载好后解压 ...

  8. java 基础教程 ppt_java基础教程课件.ppt

    java基础教程课件 第三章 运算符,表达式和语句 3.1运算符与表达式 3.2 语句的概述 3.3 控制语句 3.4循环语句 3.5break 和continue语句 3.1运算符与表达式 3.1. ...

  9. 0基础java语法_Java零基础教程(二)基础语法

    Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如 ...

  10. java 反射教程_Java基础教程——反射机制

    Java反射机制 Java反射机制是Java语言的一个重要特性,使得Java语言具备"动态性": 在运行时获取任意一个对象所属的类的相关信息; 在运行时构造任意一个类的对象: 在运 ...

最新文章

  1. 10.30 linux和windows互传文件,用户配置文件和密码配置文件,用户组管理,用户管理...
  2. 【Vegas原创】添加SQL Server Agent作业步骤中的运行身份
  3. Windows 10 下的OpenVINO Pycharm+Anaconda开发环境配置
  4. 入选2021全球青年领袖榜单,蚂蚁何征宇的技术人生
  5. php android 复制粘贴板,Android_Android剪贴板用法详解,本文实例详述了Android剪贴板的 - phpStudy...
  6. Go程序:变量声明、赋值与输出
  7. Linq 和DefaultView两种方法去掉DataTable 里的重复行
  8. Axure 免费UI元件库
  9. 监控容器并实现邮箱报警(cAdvisor 、AlertManager)
  10. 第十一章:如何拆分项目目标?
  11. ffmpeg音频合并生成新的音频文件
  12. Games104 gameplay系统笔记
  13. 【数据说第二期】联盟第一人詹姆斯四个时期大PK
  14. 2021-11-01 富文本编辑器Vue-Quill-Editor 踩坑之路
  15. 【UCIe】UCIe Standard 256B Flit for PCIe 6.0 vs. PCIe 6.0 Flit
  16. Html5中的input标签之多少
  17. 复旦大学2016--2017学年第一学期高等代数I期末考试情况分析
  18. 肖锰:浪潮GS开发平台学习札记(五)——数据对象和数据模型的建立
  19. 中国天麻产业深度调研与投资前景报告【2022版】
  20. 《华为工作法》4 科学合理的工作原则

热门文章

  1. Ubuntu桌面生存指南:Linux 的哲学
  2. Linux驱动中相关函数查询
  3. 介绍一下和AspNetPager结合的不错的分页方案
  4. idea maven repositories为空
  5. npm ERR! code EINTEGRITY 解决方案
  6. Spring事务管理实现方式之编程式事务与声明式事务详解
  7. 自定义吐司Toast小进阶
  8. 从Ibatis过渡到Mybatis-比较Mybaits较与Ibatis有哪些方面的改进
  9. 在VS中查看文件是谁签出的
  10. 婚姻是一堂需要认真学习的课程