Spark的函数式编程

Spark是近年来发展较快的分布式并行数据处理框架,了解和掌握spark对于学习大数据有着至关重要的意义。但是spark依赖于函数单元,它的函数编程过程是怎样的呢?我们怎么来应用呢?

一、Spark的函数式编程

Spark依赖于函数单元,函数是其编程的基本单元,只有输入输出,没有state和side effect。它的关键概念就是把函数作为其他函数的输入,不过在使用函数的过程中 使用的都是匿名函数,因为这个函数只是满足当下计算,因此不需要固化下来进行其它应用。

  • 把函数作为参数传递

很多RDD操作把函数作为参数传递,这里我们看一下RDD map操作伪代码,把函数fn应用到RDD的每条记录。但这并不是它执行的一个真正的代码,只是通过这个代码去看一下它处理的逻辑。

示例:传递命名的函数

  • 匿名函数

匿名函数是没有标识符的嵌入式定义的函数,最适合于临时一次性的函数。在很多编程语言中支持,比如:

(1)Python:lambda x

(2)Scala:x =>

(3)Java 8:x ->

示例:传递匿名函数

(1)Python

(2)Scala

  • 示例:Java

(1)Python

(2)Scala

Spark作为当下大数据中重要的子目,必须深度掌握学习。但是大数据还在起步发展,并没有形成完整成熟的理论系统,需要我们多方位,多渠道的挖掘学习。这里推荐“大数据cn”微信公众平台,里面介绍了很多大数据的相关知识,很不错的!

时间: 2024-08-03 07:22:54

Spark的函数式编程的相关文章

第3课 Scala函数式编程彻底精通及Spark源码阅读笔记

本课内容: 1:scala中函数式编程彻底详解 2:Spark源码中的scala函数式编程 3:案例和作业 函数式编程开始: def fun1(name: String){ println(name) } //将函数名赋值给一个变量,那么这个变量就是一个函数了. val fun1_v = fun1_ 访问 fun1_v("Scala") 结果:Scala 匿名函数:参数名称用 => 指向函数体 val fun2=(content: String) => println(co

Spark函数式编程进阶

函数式编程进阶 1.函数和变量一样作为Scala语言的一等公民,函数可以直接复制给变量: 2.函数更长用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,但是匿名函数赋值给一个变量(其实是val常量),Spark源码中大量存在这种语法: 3.函数可以作为参数直接传递给函数,这极大地简化的编程语法: 4.函数式编程一个非常强大的地方之一在于函数的返回值可以是函数,当函数的返回类型是函数的时候,这个时候就是表明Scala的函数是实现了闭包! Scala壁报的内幕是:Sca

Java8函数式编程(二):类比Spark RDD算子的Stream流操作

1 Stream流 对集合进行迭代时,可调用其iterator方法,返回一个iterator对象,之后便可以通过该iterator对象遍历集合中的元素,这被称为外部迭代(for循环本身正是封装了其的语法糖),其示意图如下: 除此之外,还有内部迭代方法,这正是这里要说明的集合的stream()方法返回的Stream对象的一系列操作,比如,要统计一个数字列表的偶数元素个数,当使用Stream对象的操作时,如下: List<Integer> list = new ArrayList<Integ

Scala函数式编程进阶

1 package com.dtspark.scala.basics 2 3 /** 4 * 函数式编程进阶: 5 * 1,函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量: 6 * 2, 函数更长用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,但是如果你要使用的话,一般会把这个匿名函数赋值给一个变量(其实是val常量),Spark源码中大量存在这种语法,必须掌握: 7 * 3, 函数可以作为参数直接传递给函数,这极大的简化的编程的语法,为什么这

Scala学习笔记(1) -- 为什么要学函数式编程

很久之前我就学过Lisp和Erlang,但是也就是写写HelloWorld,写个排序算法.也在Coursera上听过Scala的课,可是那时候我还不怎么用Java,所以后来也没怎么继续.可是对函数式编程的兴趣一直不减,工作中几乎不会用Scala,但是用的是Java,我一直在想着怎么把Scala用到工作中.最近在写一个工具,因为这个工具基本只有我们项目组用,而且很简单,所以我就用Scala写了.以后有机会,把Scala用在生产上. 为什么对函数式编程这么感兴趣呢. 第一个原因,可以装逼,或者说是个

Scala入门系列(九):函数式编程

引言 Scala是一门既面向对象,又面向过程的语言,Scala的函数式编程,就是Scala面向过程最好的佐证.也真是因此让Scala具备了Java所不具备的更强大的功能和特性. 而之所以Scala一直没有替代Java,一是因为Java诞生早,基于Java开发了大量知名的工程,并且最重要的是Java现在不只是一门编程语言,而是一个庞大的技术生态圈,所以未来十年内Scala也不会完全替代Java,但是Scala会在自己特有的领域大发光彩.   将函数赋值给变量 Scala中函数是一等公民,可以独立定

Scala函数式编程(四)函数式的数据结构 下

前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Scala函数式编程(三) scala集合和函数 Scala函数式编程(四)函数式的数据结构 上 1.List代码解析 今天介绍的内容,主要是对上一篇介绍的scala函数式数据结构补充,主要讲代码.可以先看看上一节,主要讲的是函数式的list,Scala函数式编程(四)函数式的数据结构 上.这些代码我都放在我的公众号里面,包括函数式的List以及一个函数式的二叉搜索树,关注公众号:哈尔的

Scala函数式编程(五) 函数式的错误处理

前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Scala函数式编程(三) scala集合和函数 Scala函数式编程(四)函数式的数据结构 上 Scala函数式编程(四)函数式的数据结构 下 1.面向对象的错误处理 在介绍scala的函数式的错误处理之前,我们要先来介绍一下其他情况下的错误处理方式. 以java为例,常见的错误处理方式不外乎两种,一种是及时捕捉到异常,然后当场进行处理. try{ ... }catch(Excepti

Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数

文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() 获取文件编码,f.encoding() 获取文件在内存中的编号,f.fileno() 获取文件终端类型(tty.打印机等),f.isatty() 获取文件名,f.name() 判断文件句柄是否可移动(tty等不可移动),f.seekable() 判断文件是否可读,f.readable() 判断文件是