常用transformation介绍

本文详细介绍了Spark中常见的Transformation操作,包括map、filter、flatMap、groupByKey、reduceByKey、sortByKey、join和cogroup。通过实例展示了如何使用这些操作对数据进行转换和处理,如元素映射、过滤、分组、归约、排序和连接。
摘要由CSDN通过智能技术生成

map

map:将RDD中的每个元素传入自定义函数,获取一个新的元素,然后用新的元素组成新的RDD。

案例:将集合中每一个元素都乘以2

java:

// 构造集合
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// 并行化集合,创建初始RDD
JavaRDD<Integer> numberRDD = sc.parallelize(numbers);

// 使用map算子,将集合中的每个元素都乘以2
// map算子,是对任何类型的RDD,都可以调用的
// 在java中,map算子接收的参数是Function对象
// 创建的Function对象,一定会让你设置第二个泛型参数,这个泛型类型,就是返回的新元素的类型
	// 同时call()方法的返回类型,也必须与第二个泛型类型同步
// 在call()方法内部,就可以对原始RDD中的每一个元素进行各种处理和计算,并返回一个新的元素
// 所有新的元素就会组成一个新的RDD
JavaRDD<Integer> multipleNumberRDD = numberRDD.map(

		new Function<Integer, Integer>() {

			private static final long serialVersionUID = 1L;

			// 传入call()方法的,就是1,2,3,4,5
			// 返回的就是2,4,6,8,10
			@Override
			public Integer call(Integer v1) throws Exception {
				return v1 * 2;
			}

		});

// 打印新的RDD
multipleNumberRDD.foreach(new VoidFunction<Integer>() {

	private static final long serialVersionUID = 1L;

	@Override
	public void call(Integer t) throws Exception {
		System.out.println(t);  
	}

});

scala:

val numbers = Array(1, 2, 3, 4, 5)
val numberRDD = sc.parallelize(numbers, 1)  
val multipleNumberRDD = numberRDD.map { num => num * 2 }  

multipleNumberRDD.foreach { num => println(num) } 

filter

filter:对RDD中每个元素进行判断,如果返回true则保留,返回false则剔除。

案例:过滤集合中的偶数

java:

// 模拟集合
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// 并行化集合,创建初始RDD
JavaRDD<Integer> numberRDD = sc.parallelize(numbers);

// 对初始RDD执行filter算子,过滤出其中的偶数
// filter算子,传入的也是Function,其他的使用注意点,实际上和map是一样的
// 但是,唯一的不同,就是call()方法的返回类型是Boolean
// 每一个初始RDD中的元素,都会传入call()方法,此时你可以执行各种自定义的计算逻辑
// 来判断这个元素是否是你想要的
// 如果你想在新的RDD中保留这个元素,那么就返回true;否则,不想保留这个元素,返回false
JavaRDD<Integer> evenNumberRDD = numberRDD.filter(

		new Function<Integer, Boolean>() {

			private static final long serialVersionUID = 1L;

			// 在这里,1到10,都会传入进来
			// 但是根据我们的逻辑,只有2,4,6,8,10这几个偶数,会返回true
			// 所以,只有偶数会保留下来,放在新的RDD中
			@Override
			public Boolean call(Integer v1) throws Exception {
				return v1 % 2 == 0;
			}

		});

// 打印新的RDD
evenNumberRDD.foreach(new VoidFunction<Integer>() {

	private static final long serialVersionUID = 1L;

	@Override
	public void call(Integer t) throws Exception {
		System.out.println(t);
	}

});

scala:

val numbers = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val numberRDD = sc.parallelize(numbers, 1)
val evenNumberRDD = numberRDD.filter { num => num % 2 == 0 }

evenNumberRDD.foreach { num => println(num) } 

flatMap

flatMap:与map类似,但是对每个元素都可以返回一个或多个新元素。

案例:将文本行拆分为多个单词

// 构造集合
List<String> lineList =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值