java spark 教程_Spark基础教程——向Spark传递函数(Java篇)
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篇)相关推荐
- java.util.logging.Logger基础教程
java.util.logging.Logger基础教程 @(JAVA)[java] 从JDK1.4开始即引入与日志相关的类java.util.logging.Logger,但由于Log4J的存在,一 ...
- java清华大学教程_清华大学出版社-图书详情-《Java Web应用开发基础教程》
目录 ...
- 黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三)
黑马程序员全套Java教程_Java基础教程_异常(含扩展)(二十三) 1.1 异常概述与异常体系结构 1.2 JVM遇到异常时的默认处理方案 1.3 异常处理 1.4 异常处理之try--catch ...
- 全国电子商务人才专业化从业认证考试初级教程(公共基础教程)(全国电子商务人才丛业能力教育指定教材)
书名:<全国电子商务人才专业化从业认证考试初级教程(公共基础教程)>(全国电子商务人才丛业能力教育指定教材) 作者:单兴华 组编:全国电子商务人才从业能力教育项目管理办公室 出版社:中国人 ...
- [转载]VBS入门教程 VBS基础教程
[转载]VBS入门教程 VBS基础教程(收藏) VBS基础教程 VBS(VBScript的进一步简写)是基于Visual Basic的脚本语言. Microsoft Visual Basic是微软公司 ...
- 14-(基础入门篇)关于系统教程和基础教程后期规划
https://www.cnblogs.com/yangfengwu/p/9966901.html 系统教程:现在的系统教程已经写完源码,还没配教程,现在买只能给源码哈 系统教程初步要做到的就是12节 ...
- Alibaba开源Java诊断利器Arthas基础教程
Arthas 是Alibaba开源的Java诊断工具. 官网:官网 文档:文档 github: github地址 准备工作 准备arthas 先在进入文档下载arthas的jar包:如图 下载好后解压 ...
- java 基础教程 ppt_java基础教程课件.ppt
java基础教程课件 第三章 运算符,表达式和语句 3.1运算符与表达式 3.2 语句的概述 3.3 控制语句 3.4循环语句 3.5break 和continue语句 3.1运算符与表达式 3.1. ...
- 0基础java语法_Java零基础教程(二)基础语法
Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如 ...
- java 反射教程_Java基础教程——反射机制
Java反射机制 Java反射机制是Java语言的一个重要特性,使得Java语言具备"动态性": 在运行时获取任意一个对象所属的类的相关信息; 在运行时构造任意一个类的对象: 在运 ...
最新文章
- 10.30 linux和windows互传文件,用户配置文件和密码配置文件,用户组管理,用户管理...
- 【Vegas原创】添加SQL Server Agent作业步骤中的运行身份
- Windows 10 下的OpenVINO Pycharm+Anaconda开发环境配置
- 入选2021全球青年领袖榜单,蚂蚁何征宇的技术人生
- php android 复制粘贴板,Android_Android剪贴板用法详解,本文实例详述了Android剪贴板的 - phpStudy...
- Go程序:变量声明、赋值与输出
- Linq 和DefaultView两种方法去掉DataTable 里的重复行
- Axure 免费UI元件库
- 监控容器并实现邮箱报警(cAdvisor 、AlertManager)
- 第十一章:如何拆分项目目标?
- ffmpeg音频合并生成新的音频文件
- Games104 gameplay系统笔记
- 【数据说第二期】联盟第一人詹姆斯四个时期大PK
- 2021-11-01 富文本编辑器Vue-Quill-Editor 踩坑之路
- 【UCIe】UCIe Standard 256B Flit for PCIe 6.0 vs. PCIe 6.0 Flit
- Html5中的input标签之多少
- 复旦大学2016--2017学年第一学期高等代数I期末考试情况分析
- 肖锰:浪潮GS开发平台学习札记(五)——数据对象和数据模型的建立
- 中国天麻产业深度调研与投资前景报告【2022版】
- 《华为工作法》4 科学合理的工作原则