spark算子知识整理1

本文深入探讨了Spark中RDD的转换算子和Action算子,包括filter、sample、count、first、take和collect等,通过具体代码示例展示了这些算子的使用方法和功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一次分享提到的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.youkuaiyun.com/fortuna_i/article/details/81170565

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值