Apache Spark 入门(2)

这一篇我们要来讲解 Spark 的运算机制,我本人是写 Python的,所以下面都会使用 Python 来讲解。

Transformation and Action

Spark 在执行的机制分为 Transformation 和 Action,Spark 执行的时候是使用一个叫 RDD(Resilient Distributed Dataset)的资料型态在做操作的,并且在做 transformation 是 lazy 的,所谓的 lazy 也就是当你呼叫有关 transformation 的 API 的时候,并不会马上执行,仅仅纪录 transformation 的转换过程,而是要等到你呼叫 action 的 API 的时候,Spark 才会开始动作。

wordcount

上面讲完 Spark 的运作机制后,接着让我们来小试一下身手,写一个 wordcount,带大家了解一下基本的写法跟 transformation 和 action

首先先假定大家都有 Spark 环境,所以我就直接 import Spark。

from pyspark import SparkContextdef main():    with SparkContext(appName='wordcount') with sc:                # transformation        data = sc.textFile('/inpit/a.txt').map(lambda x: x[0])\                .flatMap(lambda x: x.split(' '))\                .map(lambda x: (x, 1)).reduceByKey(lambda a, b: (a+b))                # action        result = data.collect()                for (word, count) in result:            print("word:", word, "count:", count)        if __name__ == '__main__':    main()

上面是一个 wordcount 的小範例,从读取档案以及 map 的过程,还有最后的 reduceByKey,都是属于 transformation,程式执行到这里,Spark 只会记录我们每一个对 RDD 的操作,并还没有开始做运算,直到我写了 collect(),Spark 就会开始往回找说这一个 RDD 是由前面哪一个操作产生出来的,一直持续往前找,直到找到最初的源头,然后一口气算完,这感觉有一点像递迴。

以上是 Spark 的程式基本概念,详细的 transformation 和 action 还有很多 API 可以用,可以多多上官网查询,如果小弟的文章内容或观念有误,或是各位有更好的意见,欢迎在下面留言交流。

Reference

Spark 2.0


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章