spark算子知識整理1

上一次分享提到的map、flatmap都歸屬於轉換算子,foreach則屬於Action算子;由於算在在spark中較爲重要後續幾次都是分享算子相關的東西,先來看一段代碼

package com.debug;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.VoidFunction;

public class RDDFilter {

	public static void main(String[] args) {
		SparkConf conf=new SparkConf();
		conf.setMaster("local");
		conf.setAppName("WordCountApp");
		
		JavaSparkContext sc=new JavaSparkContext(conf);
		
		//讀取字數統計txt文件
		JavaRDD<String> lines=sc.textFile("/home/cry/word1.txt");
		
		JavaRDD<String> res=lines.filter(new Function<String, Boolean>() {
			
			public Boolean call(String line) throws Exception {
				//System.out.println("transformation類型的RDD已經觸發執行");
				return line.startsWith("hi");
			}
		});
		
		res.foreach(new VoidFunction<String>() {
			
			public void call(String line) throws Exception {
				System.out.println(line);
			}
		});
		
		sc.stop();

	}

}

本段代碼的filter轉換算子的功能是過濾出以hi開頭的內容,下面是運行結果

下面再介紹幾個常用的算子分別是sample(轉換算子),Action算子count、first、take、collect,還是先上一段代碼

package com.debug;

import java.util.List;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.VoidFunction;

public class UseRDD01 {

	public static void main(String[] args) {
		SparkConf conf=new SparkConf();
		conf.setMaster("local");
		conf.setAppName("WordCountApp");
		
		JavaSparkContext sc=new JavaSparkContext(conf);
		
		//讀取字數統計txt文件
		JavaRDD<String> lines=sc.textFile("/home/cry/word1.txt");
	
		//其他transformation類型的RDD-sample
		JavaRDD<String> sampleLs=lines.sample(false, 0.8);
		
		sampleLs.foreach(new VoidFunction<String>() {
		
			public void call(String line) throws Exception {
				System.out.println(line);
			}
		});	
		
	
		//其他action類型的RDD
		//long count=lines.count();
		//System.out.println("總行數:"+count);
		
		/*String firstLine=lines.first();
		System.out.println("firstLine:"+firstLine);
		
		List<String> arr=lines.take(2);
		for (String line : arr) {
			System.out.println("---"+line);
		}*/
		
		/*List<String> arr2=lines.collect();
		for (String line : arr2) {
			System.out.println("---"+line);
		}*/
		sc.stop();
		
		

	}

}

count: 返回數據集中的元素個數

first:返回數據集中的第一個元素

take:以數組的形式返回數據集中的n個元素

collect:以數組的形式返回數據集中的所有元素

sample:從樣本中取出部分數據

最後提供一篇其他人寫的有關算子總結,可以參考下:

https://blog.csdn.net/fortuna_i/article/details/81170565

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章