412RDD操作 2.行动操作 行动操作是真正触发计算的地方。Spak程序执行到行动操作 时,才会执行真正的计算,从文件中加载数据,完成一次又 次转换操作,最终,完成行动操作得到结果 表常用的RDD行动操作AP 操作 含义 count返回数据集中的元素个数 collect0以数组的形式返回数据集中的所有元素 first)返回数据集中的第一个元素 take(n)以数组的形式返回数据集中的前n个元素 reduce(func)通过函数fune(输入两个参数并返回一个值)聚合 数据集中的元素 foreach(func)将数据集中的每个元素传递到函数tunc中运行 Spark编程基础》 厦门大学计算机科学系 林子雨 ziyulin@xmu.edu.cn
《Spark编程基础》 厦门大学计算机科学系 林子雨 ziyulin@xmu.edu.cn 4.1.2 RDD操作 行动操作是真正触发计算的地方。Spark程序执行到行动操作 时,才会执行真正的计算,从文件中加载数据,完成一次又一 次转换操作,最终,完成行动操作得到结果。 操作 含义 count() 返回数据集中的元素个数 collect() 以数组的形式返回数据集中的所有元素 first() 返回数据集中的第一个元素 take(n) 以数组的形式返回数据集中的前n个元素 reduce(func) 通过函数func(输入两个参数并返回一个值)聚合 数据集中的元素 foreach(func) 将数据集中的每个元素传递到函数func中运行 表 常用的RDD行动操作API 2. 行动操作
412RDD操作 >>>rdd=sc parallelize([1, 2, 3, 4, 5]) >> rdd counto 5 rdd. first >> rdd take(3) [1,2,3 >> rdd reduce(lambda a, b a+b) 15 >> rdd collecto [1,2,3,4,5] >>>rdd foreach (lambda elem: print(elem)) 5 Spark编程基础》 厦门大学计算机科学系 林子雨 ziyulin@xmu.edu.cn
《Spark编程基础》 厦门大学计算机科学系 林子雨 ziyulin@xmu.edu.cn 4.1.2 RDD操作 >>> rdd = sc.parallelize([1,2,3,4,5]) >>> rdd.count() 5 >>> rdd.first() 1 >>> rdd.take(3) [1, 2, 3] >>> rdd.reduce(lambda a,b:a+b) 15 >>> rdd.collect() [1, 2, 3, 4, 5] >>> rdd.foreach(lambda elem:print(elem)) 1 2 3 4 5
412RDD操作 惰性机制 所谓的“惰性机制”是指,整个转换过程只是记录了转换的轨迹,并不会发生真 正的计算,只有遇到行动操作时,才会触发“从头到尾”的真正的计算 这里给出一段简单的语句来解释 Spark的惰性机制 lines= sc textFile( file: //usr/local/spark/mycode/rdd/word. txt >>>lineLengths= lines. map(lambda s: len(s)) totalLength=lineLengths reduce(lambda a, b a+b) >> print(totalLength Spark编程基础》 厦门大学计算机科学系 林子雨 ziyulin@xmu.edu.cn
《Spark编程基础》 厦门大学计算机科学系 林子雨 ziyulin@xmu.edu.cn 4.1.2 RDD操作 >>> lines = sc.textFile("file:///usr/local/spark/mycode/rdd/word.txt") >>> lineLengths = lines.map(lambda s:len(s)) >>> totalLength = lineLengths.reduce(lambda a,b:a+b) >>> print(totalLength) 惰性机制 所谓的“惰性机制”是指,整个转换过程只是记录了转换的轨迹,并不会发生真 正的计算,只有遇到行动操作时,才会触发“从头到尾”的真正的计算 这里给出一段简单的语句来解释Spark的惰性机制
4.13持久化 在 Spark中,RDD釆用惰性求值的机制,每次遇到行动操作,都会从头开始执 行计算。每次调用行动操作,都会触发一次从头开始的计算。这对于迭代计 算而言,代价是很大的,迭代计算经常需要多次重复使用同一组数据 下面就是多次计算同一个RDD的例子: e>>list=[Hadoop","Spark", Hive" >>>rdd=Sc parallelize list) >> print( (rdd counto)∥行动操作,触发一次真正从头到尾的计算 >>> print(;join(rd, collecto)∥行动操作,触发一次真正从头到尾的计算 Hadoop, Spark, Hive Spark编程基础》 厦门大学计算机科学系 林子雨 ziyulin@xmu.edu.cn
《Spark编程基础》 厦门大学计算机科学系 林子雨 ziyulin@xmu.edu.cn 4.1.3 持久化 在Spark中,RDD采用惰性求值的机制,每次遇到行动操作,都会从头开始执 行计算。每次调用行动操作,都会触发一次从头开始的计算。这对于迭代计 算而言,代价是很大的,迭代计算经常需要多次重复使用同一组数据 下面就是多次计算同一个RDD的例子: >>> list = ["Hadoop","Spark","Hive"] >>> rdd = sc.parallelize(list) >>> print(rdd.count()) //行动操作,触发一次真正从头到尾的计算 3 >>> print(','.join(rdd.collect())) //行动操作,触发一次真正从头到尾的计算 Hadoop,Spark,Hive
4.13持久化 ·可以通过持久化(缓存)机制避免这种重复计算的开销 可以使用 persist方法对一个RDD标记为持久化 之所以说“标记为持久化”,是因为出现 persist语句的地 方,并不会马上计算生成RDD并把它持久化,而是要等到 遇到第一个行动操作触发真正计算以后,才会把计算结果进 行持久化 持久化后的RDD将会被保留在计算节点的内存中被后面的 行动操作重复使用 Spark编程基础》 厦门大学计算机科学系 林子雨 ziyulin@xmu.edu.cn
《Spark编程基础》 厦门大学计算机科学系 林子雨 ziyulin@xmu.edu.cn 4.1.3 持久化 •可以通过持久化(缓存)机制避免这种重复计算的开销 •可以使用persist()方法对一个RDD标记为持久化 •之所以说“标记为持久化”,是因为出现persist()语句的地 方,并不会马上计算生成RDD并把它持久化,而是要等到 遇到第一个行动操作触发真正计算以后,才会把计算结果进 行持久化 •持久化后的RDD将会被保留在计算节点的内存中被后面的 行动操作重复使用