在google上,spark和hadoopmapreduce的关键区别在于处理方法:spark可以在内存中完成,而hadoopmapreduce必须从磁盘读写。看起来我明白了,但我想用一个例子来证实。
考虑以下字数计算示例:
val text = sc.textFile("mytextfile.txt")
val counts = text.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_)
counts.collect
我的理解是:
在spark的情况下,一旦行被“”分开,输出将存储在内存中。与函数map和reduce类似。我相信在跨分区进行处理时也是如此。
在mapreduce的情况下,每个中间结果(如split/map/reduce之后的单词)是否会保存在磁盘上,即hdfs,这使得它比spark慢?我们不可能把它们留在记忆里吗?分区结果也是如此?
1条答案
按热度按时间ifmq2ha21#
是的,你说得对。
spark intermediate rdd(弹性分布式数据集)结果保存在内存中,因此延迟要低得多,作业吞吐量也要高。RDDS有分区,像Skar这样的数据块也提供迭代处理,也是一个要考虑的关键点。
先生确实有一个组合器,当然可以减轻一点痛苦。
但是spark也更容易使用,比如scala或pyspark。
总的来说,我不会再担心先生了。
以下是关于spark的精彩读物:https://medium.com/@goyalsaurabh66/spark-基础知识-rdds-stages-tasks-and-dag-8da0f52f0454