首页 > 其他分享 >今日总结

今日总结

时间:2024-02-06 23:11:42浏览次数:27  
标签:总结 10 函数 list 今日 Spark my lambda


 

 

这意味着运行Spark就需要新建一个笔记本。

 

 

 

加载数据

 

下一步是上传用于学习Spark的一些数据。只需点击主页选项卡上的“导入并查看数据”。

 

本文末尾会使用多个数据集来说明,但现在先从一些非常简单的东西开始。

 

添加shakespeare.txt文件,下载传送门:https://github.com/MLWhiz/spark_post

 

 

 

 

可以看到文件加载到/FileStore/tables/shakespeare.txt这个位置了。

 

 

 

第一个Spark程序

 

本文倾向通过示例学习,所以让我们完成分布式计算的“Hello World”: WordCount 程序。

 

 

 

 

这是一个小例子,其统计了文档字数并输出了其中的10。

 

大多数工作是在第二指令中完成的。

 

如果目前还是跟不上,也别担心,你的任务就是运行Spark。

 

但是在讨论Spark的基础知识之前,先了解一下Python基础知识。如果使用过Python的函数式编程,那么理解Spark将变得容易得多。

 

对于没有使用过Python的人,以下是一个简短介绍。

 

 

 

Python中编程的函数方法

 

 

 

 

1. 映射

 

map用于将函数映射到数组或列表中。如果想应用某函数到列表中的各元素中,只需通过使用for循环来实现,但是python lambda函数可允许在python的单行中实现这一点。

 

my_list = [1,2,3,4,5,6,7,8,9,10]
# Lets say I want to square each term in my_list.
squared_list = map(lambda x:x**2,my_list)
print(list(squared_list))
------------------------------------------------------------
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

 

在上面的例子中,可将map看作一个函数,该函数输入两个参数—一个函数和一个列表。

 

然后,其将该函数应用于列表中各元素,而lambda则可供编写内联函数使用。在这里lambda x:x**2定义了一个函数,将x输入,返回x²。

 

也可以用另外一个合适的函数来代替lambda。例如:

 

def squared(x):
    return x**2
my_list = [1,2,3,4,5,6,7,8,9,10]
# Lets say I want to square each term in my_list.
squared_list = map(squared,my_list)
print(list(squared_list))
------------------------------------------------------------
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

 

同样的结果,但是lambda表达式使代码更紧凑,可读性更强。

 

2. 筛选

 

另一个广泛使用的函数是filter函数。此函数输入两个参数—一个条件和一个筛选列表。

 

如果想使用条件筛选列表,请使用filter函数。

 

my_list = [1,2,3,4,5,6,7,8,9,10]
# Lets say I want only the even numbers in my list.
filtered_list = filter(lambda x:x%2==0,my_list)
print(list(filtered_list))
---------------------------------------------------------------
[2, 4, 6, 8, 10]

 

3. 约归

 

下面介绍的函数是reduce函数。这个函数将是Spark中的主力部分。

 

这个函数输入两个参数——一个归约函数,该函数输入两个参数,以及一个应用约归函数的列表。

 

import functools
my_list = [1,2,3,4,5]
# Lets say I want to sum all elements in my list.
sum_list = functools.reduce(lambda x,y:x+y,my_list)
print(sum_list)

 

在python2中,约归曾经是Python的一部分,现在我们必须使用reduce,使其作为函数工具的一部分。

 

在这里,lambda函数输入两个值x和y,返回它们的和。直观地,可以认为约归函数的工作原理如下:

 

Reduce function first sends 1,2    ; the lambda function returns 3
Reduce function then sends 3,3     ; the lambda function returns 6
Reduce function then sends 6,4     ; the lambda function returns 10
Reduce function finally sends 10,5 ; the lambda function returns 15

 

在约归中使用的lambda函数的一个条件是它必须是:

 

· 交换律 a + b = b + a 和

 

· 结合律 (a + b) + c == a + (b + c).

 

在上面的例子中,使用了交换律和结合律。另外还可以使用的其他函数:max, min, *等等。

 

 

 

再次回到Spark

 

既然已经掌握了Python函数式编程的基本知识,现在开始了解Spark。

 

首先深入研究一下spark是如何工作的。Spark实际上由驱动和工作单元两部分组成。

 

工作单元通常执行这些需要完成的任务,而驱动则是发布任务指令的。

 

弹性分布式数据集

 

RDD(弹性分布式数据集)是一种并行的数据结构,分布在工作单元节点之间。RDD是Spark编程的基本单元。

 

在wordcount示例中,其第一行

 

lines = sc.textFile("/FileStore/tables/shakespeare.txt")

 

获取一个文本文件,将其分布到工作单元节点上,这样RDD就可以并行地处理此文件。还可以使用sc.parallelize函数并行计算列表。

 

例如:

 

data = [1,2,3,4,5,6,7,8,9,10]
new_rdd = sc.parallelize(data,4)
new_rdd
---------------------------------------------------------------
ParallelCollectionRDD[22] at parallelize at PythonRDD.scala:267

 

在Spark中,可以对RDD执行两种不同类型的操作:转换和操作。

 

1. 转换:从现有的RDD中创建新的数据集

 

2. 操作:从Spark中获取结果的机制

 

 

 

转换基础

 

 

 

 

假设已经以RDD的形式获取了数据。

 

目前可以通过访问工作机器来重报数据。现在想对数据进行一些转换。

 

比如你可能想要筛选、应用某个功能等等。

 

在Spark中,这可以由Transformation函数完成。

 

Spark提供了很多转换函数。

 

标签:总结,10,函数,list,今日,Spark,my,lambda
From: https://www.cnblogs.com/zhaoyueheng/p/18010453

相关文章

  • 每日总结
    Byte8位有符号补码整数。数值区间为-128到127Short16位有符号补码整数。数值区间为-32768到32767Int32位有符号补码整数。数值区间为-2147483648到2147483647Long64位有符号补码整数。数值区间为-9223372036854775808到9223372036854775807Float3......
  • 巴蜀训练总结
    Mindevelopeddiedtoamobandbecameaghost.考了\(7\)套题,全军覆灭。第一次感到省选题原来是这种难度。看来水平还是太菜了。Youknowtoomuchalgos.-is-this-fft其实现在的题越来越偏向思维的考察,之前一直完全没有理解这句话的含义,然后结果发现省选根本不考\(8\)......
  • Python生成器表达式和生成器(yield)用法总结
    ​ Python中,在处理一个新序列,不想在内存中放置一个新的列表、集合或者字典。因为可能数据量比较大,不能将所有数据都放到内存中。可能只做一次遍历,而不关心是否要创建一个最终的对象容器。此时就可以使用生成器了。生成器是一种使用简洁的语法创建迭代器的工具。主要有两种方......
  • 2.6寒假每日总结27
    如果说有什么感想的话,那就是对软件工程这一领域的敬畏和热爱。软件开发绝非易事,它需要我们不断地学习、实践和创新。但正是这种挑战和不确定性,使得软件工程充满了无限的可能和魅力。我愿意为这一领域付出我所有的热情和努力,因为我深知,软件工程不仅仅是一门技术科学,更是一种智慧与......
  • 单点登录怎么做?SSO实现原理和优势总结
    前言大家好,我是chowley,我最近在总结之前的项目,其中登陆模块我用了目前主流的SSO,今天就来总结一下,我对单点登录的理解,也欢迎大家讨论和指点。单点登录在当今互联网应用中,用户经常需要同时访问多个相关但相互独立的系统或应用程序。为了简化用户的登录体验、提高安全性和降低管理......
  • SRE故障总结
    在网络上关于SRE的讨论中,故障相关的内容比比皆是,但关于故障发生时的应急处理过程的详细讨论却寥寥无几。然而面对故障,故障指挥官一定面临着较大的压力,需要快速、正确地处置故障,应对内外部的挑战。在这篇文章中,我们将重点探讨故障指挥官在故障处理过程中的具体行动思路。值得注意......
  • 常用TS总结
    自己常用的TS写法总结,应该会一直更新。可使用TS在线编译校验TS语法。基本用法普通constnum:number=10constisStop:boolean=falseconsttitle:string='常用TS总结'constcurName:null=nullconstcurType:undefined=undefinedconstbirthday:Date......
  • 2月4日总结
    本文介绍分布式开源版本控制系统Git的下载、安装,并基于Git实现克隆GitHub中项目代码的方法。Git是一款开源软件,因此我们直接在Git的官方下载地址下载最新版本的Git即可。其中,在下图所示的位置选择适合我们操作系统的Git版本。随后,选择下图红色方框内的内容,下载最新版的Git。下......
  • 2月3日总结
    所谓内存池,顾名思义和线程池的设计原理是一样的,为了减少频繁申请释放内存而带来的资源消耗,减少释放内存后产生的内存碎片。设计理念为了方便管理内存池的设计通常是划分出一定数量的内存块,这些内存块的长度是一样的;用户申请内存块时返回空闲的内存块地址,如果内存块使用完毕就释......
  • 2月2日总结
    1.1OpenVINO™C#API英特尔发行版OpenVINO™工具套件基于oneAPI而开发,可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,适用于从边缘到云的各种英特尔平台上,帮助用户更快地将更准确的真实世界结果部署到生产系统中。通过简化的开发工作流程,OpenVINO™可赋能开......