上一次分享提到的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