Spark RDD的fold和aggregate为什么是两个API?为什么不是一个foldLeft?

RK3568下GPIO模拟串口 在嵌入式开发中,硬件 UART 资源可能被其他外设占用。此时,通过 GPIO 模拟 UART(软串口)成为一种灵活的解决方案。本文基于 RK3568 平台,结合 Linux 内核模块,实现高精度软串口通信,并深入分析关键技术细节。可以看到已经接收到数据了,可以自己创建自定义的设备文件到/dev下,也可以按照串口设备的标准创建一个设备,后面有时间我写一篇和标准串口设备结合的gpio模拟串口文章。RK3568 GPIO 模拟串口(软串口)实现详解。将编译好的驱动放到板子上运行。再写个Makefile。 阅读详情

欢迎关注我的新博客地址:http://cuipengfei.me/blog/2014/10/31/spark-fold-aggregate-why-not-foldleft/

大家都知道Scala标准库的List有一个用来做聚合操作的foldLeft方法。

比如我定义一个公司类:

1
case class Company(name:String, children:Seq[Company]=Nil)

它有名字和子公司。 然后定义几个公司:

1
val companies = List(Company("B"),Company("A"),Company("T"))

三家大公司,然后呢,我假设有一家超牛逼的公司把它们给合并了:

1
companies.foldLeft(Company("King"))((king,company)=>Company(name=king.name,king.children:+company))

这个执行的结果是这样的:

1
2
scala> companies.foldLeft(Company("King"))((king,company)=>Company(name=king.name,king.children:+company))
res6: Company = Company(King,List(Company(B,List()), Company(A,List()), Company(T,List())))

可见foldLeft的结果是一家包含了BAT三大家得新公司。

由List[Company]聚合出一个新的Company,这种属于foldLeft的同构聚合操作。

同时,foldLeft也可以做异构的聚合操作:

1
companies.foldLeft("")((acc,company)=>acc+company.name)

它的执行结果是这样的:

1
2
scala> companies.foldLeft("")((acc,company)=>acc+company.name)
res7: String = BAT

由List[Company]聚合出一个String。

这样的API感觉很方便,只要是聚合,无论同构异构,都可以用它来做。

最近接触了Spark,其中的RDD是做分布式计算时最常用的一个类。

RDD有一个叫做fold的API,它和foldLeft的签名很像,唯一区别是它只能做同构聚合操作。

也就是说如果你有一个RDD[X],通过fold,你只能构造出一个X。

如果我想通过一个RDD[X]构造一个Y出来呢?

那就得用aggregate这个API了,aggregate的签名是这样的:

1
aggregate[U](zeroValue: U)(seqOp: (U, T) ⇒ U, combOp: (U, U) ⇒ U)(implicit arg0: ClassTag[U]): U

它比fold和foldLeft多需要一个combOp做参数。

这让我很不解,同构和异构的API干嘛非得拆成两个呢?怎么不能学Scala的标准库,把它做成类似foldLeft的样子呢?

后来想明白了,这是由于Spark需要分布运算造成的。

先想一下Scala List的foldLeft是怎么工作的?

1
companies.foldLeft(Company("King"))((king,company)=>Company(name=king.name,king.children:+company))
  1. 拿到初始值,即名字为king的公司,把它和list中的第一个公司合并,成为一个包含一家子公司的新公司
  2. 把上一步中的新公司拿来和list中的第二个公司合并,成为一个包含两家子公司的新公司
  3. 把上一步中的新公司拿来和list中的第三个公司合并,成为一个包含三家子公司的新公司

这是同构的过程。

1
companies.foldLeft("")((acc,company)=>acc+company.name)
  1. 拿到初始值,即空字符串,把它和list中的第一个公司的名字拼在一起,成为B
  2. 把上一步中的B第二个公司名字拼一起,成为BA
  3. 把上一步中的BA拿来和list中的第三个公司的名字拼一起,成为BAT

这是异构的过程。

像多米诺骨牌一样,从左到右依次把list中的元素吸收入结果中。

现在假设RDD[X]中有一个类似foldLeft的API,其签名和foldLeft一致,我现在调用foldLeft,给它一个f:(Y,X)=>Y,接下来该发生什么呢?

  1. 因为要分布计算,所以我先要把手里的很多个X分成几份,分发到不同的节点上去
  2. 每个节点把拿到的很多个X计算出一个Y出来
  3. 把所有节点的结果拿来,这时我手里就有了很多个Y
  4. 啊。。。我不知道怎么把很多个Y变成一个Y啊。。。

由于Spark的RDD不像Scala的List一样只需要推倒一副多米诺骨牌,而是要推倒很多副,最后再对很多副多米诺骨牌的结果做聚合。

这时如果是同构还好,我只需要再用f:(X,X)=>X做一遍就ok了。

但是如果是异构的,那我就必须得再需要一个f:(Y,Y)=>Y了。

SAP B1中文培訓教材_SDK 公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说 立即下载

相关推荐

从零到一:基于K375S主控的机械键盘优联无线化改造实战

本文详细记录了基于罗技K375S主控进行机械键盘优联无线化改造的全过程。从改造动机、核心原理与物料准备,到电路设计、PCB打样、焊接调试,逐步拆解了将优联技术集成到自定义机械键盘中的实战步骤。项目最终实现了低延迟、高稳定性且支持多设备连接的优联无线机械键盘,为DIY爱好者提供了高性价比的改造方案。

h0i1j2k3l的博客 601

Kotlin | 高阶函数reduce()、fold()详解

reduce()适用于不需要初始值的聚合操作,fold()适用于需要初始值的聚合操作。reduce()操作可以直接返回聚合后的结果,而fold()操作需要通过lambda表达式的返回值来更新累加器的值。在使用时,需要根据具体场景来选择使用哪个函数。

小马快跑的博客 2651

如何在STM32上5分钟搞定nanopb协议传输?附完整代码示例

本文提供了在STM32微控制器上快速集成nanopb协议传输的实战指南。通过详细的步骤,从.proto文件定义、代码生成到STM32CubeIDE项目移植,帮助开发者利用nanopb这一轻量级Protocol Buffers C语言实现,在5分钟内构建高效、跨平台的嵌入式设备通信框架,并附有完整的代码示例。

jwt8token的博客 839

Scala学习笔记——reduce、fold、scan

Scala学习笔记之reduce、fold、scan 文章目录`Scala`学习笔记之`reduce`、`fold`、`scan``1. reduce化简`概念与区别:示例:`1.` 计算给定集合的元素和:`2.` 计算`n!`:`2. fold折叠`概念与区别:示例:`1.` 计算`n!`(`reduce`的优化):`2.` 统计字符串中每个字符出现的频次:`3. scan扫描`概念与区别: ...

Au的博客 3810

Nengo神经工程框架:脉冲神经网络的实时编译与硬件部署

脉冲神经网络(SNN)作为类脑计算的核心范式,正从生物模拟走向工程落地。其本质是用离散脉冲建模神经动力学,关键在于实现可预测、可复现的神经行为而非单纯拟合函数。Nengo基于神经工程学框架(NEF),将动态系统理论与硬件约束深度融合,通过解析式权重计算、确定性时间步长(dt)和多后端编译能力,支撑从CPU仿真到Loihi/FPGA的端到端部署。它不替代深度学习框架,而是提供面向神经形态芯片的‘神经编译器’能力,使LIF神经元参数、突触动力学与硬件时序严格对齐,显著提升实时性、能效比与物理可解释性。

weixin_32533659的博客 638

什么是PCIe Relaxed Ordering

什么是PCIe上的Relaxed Ordering呢?直接翻译的话就是宽松排序。在理解这个东西之前,需要先了解下什么是PCIe的基本事务排序法则。

qq_42824983的博客 1513

[Kotlin 开发] reduce和fold的区别

1.先写个小例子 reduce println((0..5).reduce { acc, i -> Log.e("reduce ====","acc:"+acc+" i:" + i) acc + i }) // 输出结果: // E/reduce ====: acc:0 i:1 // E/reduce ====: acc:1 i:2 // E/reduce ====: acc:3 i:3 // E/reduce ====: acc:6 i:4 // E/reduce ====:

u010130947的专栏 2098

产品经理-面试题目--持续更新

答:面试官,你好,我叫XXX,来自于XXXX,我系统的学习过软件开发,也主动的积累了不少产品方面的实战经验,在学习期间,我自己独立的完成了2个深度项目,一个是仿抖音的短视频APP全流程设计,另外一个是电商后台系统的模块,通过这些项目,我不仅熟练使用Axure等工具做出高保真原型图和清晰的产品框架,也形成了数据驱动和用户优先的思维习惯,另外,我也注重拓展自己的能力边界,拿到了CAIE人工智能证书,我希望能把AI能力融入到产品场景,提升体验和效率,我非常喜欢产品工作带来的创造性和逻辑性,希望有机会加入贵公司。

m0_63966958的博客 958

RDD之fold()方法

RDD之fold()方法 简述: fold()和reduce()一样的,但是fold()需要提供初始值。 直接看代码: //分成2个区 JavaRDD<Integer> numRdd= sc.parallelize(Arrays.asList(1,2,3,4),2); //fold注意:计算每个分区之后还要合并分区结果,合并时也需要加上初始值 Integer fold = numRdd.fold(10, new Function2&

weixin_45264992的博客 478

【RK3588 NPU性能调优实战】多线程异步推理YOLOv5,榨干6TOPS算力

本文详细解析了如何在RK3588 NPU上通过多线程异步推理优化YOLOv5目标检测性能,实现6TOPS算力的最大化利用。通过线程池设计、流水线化帧处理及避开内存带宽瓶颈等技巧,将NPU利用率从30%提升至82%,帧率显著提高至61.2FPS。文章还提供了环境配置、代码实现及性能对比数据,助力开发者高效部署AI模型。

weixin_29034963的博客 341

X书x-mini-sig_x-mini-mua

X书的tiny风控代码,成功运行x-mini-sig|x-mini-mua

Codeooo 博客 1万+

learning-spark学习笔记(2):reduce()、fold()和aggregate()的区别

reduce()、fold()和aggregate()都是在spark中对RDD的聚合操作,在理解这几个函数的时候费了一点劲 reduce()和fold()要求操作的RDD是同种类型,也就是操作的元素类型和返回的元素类型一致 temp = sc.parallelize([1,2,3,4]) sum = temp.reduce(lambda x, y: x + y) 注意这里x指的是这...

sdoddyjm68的博客 2922

如何在 Windows 中实时打开字幕

在 Windows 操作系统中,你可以使用编程来实现实时字幕功能,以便在屏幕上显示即时的文字内容。下面是一个示例代码,展示了如何使用Python编程语言在Windows上实现实时字幕功能。这样,字幕窗口将会不断地显示系统当前时间作为字幕。你可以根据自己的需求修改主循环中的内容,以显示你想要的实时字幕。希望以上代码和说明能够帮助你在Windows中实现实时字幕功能。函数创建了一个顶级窗口,并设置窗口的样式、位置和大小。方法,用于在字幕窗口中显示指定的字幕内容。上述代码中,我们使用了Python的。

DevWizard的博客 3270

fold函数_Java中使用Map and Fold进行函数式编程

fold函数 在函数式编程中,Map和Fold是两个非常有用的运算符,它们属于每种函数式语言。 如果Map和Fold运算符是如此强大且必不可少,那么您如何解释说即使Java编程语言缺少这两个运算符,我们也可以使用Java来完成工作? 事实是,使用Java进行编码时,您已经进行了Map和Fold,只是每次都使用循环手动进行操作。 免责声明:我不是函数式编程的参考,本文不过是一个简短的介绍。 F...

最佳 Java 编程 934

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Spark基础知识20_Scala遍历操作,map和flatMap操作、fliter、reduce、fold

对lambda表达式含义的解释--->遍历到的元素赋值给s,然后让s去执行后续方法,这样就可以一个一个转换掉,此例中,会把值给s,然后执行.toUpperCase方法,然后再遍历,再执行下去.朗母达表达式,匿名函数case模式匹配,kv._1表示匹配的键,kv._2表示的匹配的值,这是元组的表达方式,这些遍历方法都可以去尝试。10 作为初始的s ,10 * 1,10 * 2, 20 * 3 ,60 * 4,240 *5。这些元素就构成了很大的集合,得到非常多的元素构成的整体的集合,就是我们所要的结果。

Matrix70的博客 1684

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Spark编程之基本的RDD算子之fold,foldByKey,treeAggregate, treeReduce

Spark编程之基本的RDD算子之fold,foldByKey,treeAggregate, treeReduce 1) fold def fold(zeroValue: T)(op: (T, T) => T): T这个api算子接收一个初始值,fold算子传入一个函数,合并两个同类型的值,同时返回一个相同类型的值这个算子在每个分区对值进行合并。在每个分区合并时以一个zeroValue作为在每个在每

stevekangpei的博客 818

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Scala中,reduce, fold, 和 sorted

: 这个函数主要用于将集合中的元素通过某种累积规则(比如加法、乘法、最大值查找等)组合成单个结果。它从左到右遍历集合,并应用给定的二元操作函数(如。:这个函数用于返回一个排序后的集合副本,原集合不会改变。对于List,SortedSet或SortedMap,,但是从右到左遍历集合。这个在某些上下文中可能会更自然,尤其是当操作需要在每个元素上依赖之前的结果时。直接按元素自然顺序排序;而对于自定义类型的序列,需要提供一个比较器(Comparator)。

2401_82366115的博客 525

Spark核心之aggregate和fold

在本文中介绍Spark中Action的两种算子,分别是aggregate和fold,其方法定义分别为: • aggregate[U](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U)(implicit argO: ClassTag[U]): U • fold(zero Value: T)(op: (T, T) =...

LMR的博客 9625

函数式编程里面的fold

第一:基本概念 fold在函数式编程里面的基本含义是遍历数据结构,最后产生一个聚合值。最简单的例子是sum list = foldl (+) 0 list fold抽象了两个动作,一个是遍历数据结构本身,一个是累积值和元素之间的关系。用了fold后就只需要关心聚合的初始值是什么,每个元素和累积值如何产生下一个累积值。 比如上面的sum的例子,初始值是0, 步进函数式+, 也就是每个元

在理想和现实之间来回碰撞的程序员 4897

Kotlin 中 fold 和 reduce 的基本区别是什么

在 Kotlin 中都是强大的聚合操作函数,但在使用时需要根据具体情况选择合适的函数。如果需要一个初始值来确保结果的类型或者处理空集合的情况,在这个例子中,初始值为 0,每次迭代将累加器和列表中的元素相加,最终得到列表元素的总和。同样对于计算整数列表中所有元素的总和,如果确定列表不为空,可以使用。这里直接对列表中的两个元素进行操作,逐步将结果累加到最终的总和。假设我们有一个整数列表,想要计算列表中所有元素的总和,可以使用。如果集合不为空且不需要初始值,在 Kotlin 中,可以提供更简洁的语法。

challenge51all的专栏 822

fold函数和reduce函数的区别(不特指spark)

In a fold over a collection, the accumulator type may be different than the type of the collection, and a zero element is usually given. In a reduce, you don't give a zero element and the accumulato

点火三周的专栏 4122

scala练习——fold函数

题目 用fold方法将数组中的每个列表相同下标的元素进行聚合。 数据:Array(List(2,3,4), List(1,2,3), List(4,5,6)) 结果为:Array(7,10,13) 解析 fold函数,英文翻译意为折叠,其源代码如下: def fold[A1 >: A](z: A1)(op: (A1, A1) => A1): A1 = foldLeft(z)(op) //该函数有两个参数,且后一个参数为一个函数,两个参数是采用柯里化联合到一起的。后面调回的是 //foldL

yeah_you_are的博客 897

Spark算子[11]:reduce、aggregate、fold 详解

以上三个方法操作都是对RDD进行的聚合操作。1、reduce()与fold()方法是对同种元素类型数据的RDD进行操作,即必须同构。其返回值返回一个同样类型的新元素。val nums = Array(1,2,3,4,5,6,7,8,9) val numsRdd = sc.parallelize(nums,3) val reduce = numsRdd.reduce((a,b) => a+b)2、fo

行走的树 3108

Scala高阶函数之 map, reduce, flatMap(扁平化), fold(折叠), scan(扫描)

高阶函数: 高阶函数是指使用其他函数作为参数、或者返回一个函数作为结果的函数。在Scala中函数是“一等公民”,所以允许定义高阶函数。这里的术语可能有点让人困惑,我们约定,使用函数值作为参数,或者返回值为函数值的“函数”和“方法”,均称之为“高阶函数”。 最常见的一个例子是Scala集合类(collections)的高阶函数map object HighOrderFunDemo02 { def...

李昊轩的博客 1965

fold函数如何使用与如何用fold函数求最小值

【代码】fold函数如何使用与如何用fold函数求最小值。

CYLktiao的博客 211
上一篇: Scala中Stream的应用场景及其实现原理
下一篇: 15篇干货博客 38本书 4门公开课 减掉20斤体重 我的2014总结
崔鹏飞
博客等级 码龄19年 441粉丝 128原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值