RDD转化操作

本文深入探讨了Spark中RDD的基本概念与操作,包括创建、转换及行动操作,通过实例展示了如何使用Java API进行数据处理,如filter、map、flatMap等,并介绍了如何将结果保存到外部存储。

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

sprark

RDD编程 Resilient Distributed Dataset 分布式的元素集合
1.创建RDD
2.转化已有RDD
3.调用RDD操作进行求值
4.Spark会自动将RDD中的数据分发到集群上,将操作并行化执行。

两种创建RDD的方法:
1.读取一个外部数据集
2.在驱动器程序里分发驱动器程序中的对象集合,比如list和set

创建出来后,RDD支持两种类型的操作:
1.转化操作cur RDD->new RDD ,比如filter()
2.行动操作 对RDD计算结果,把结果返回到驱动器程序中,或把结果存储到外部存储系统,比如HDFS

Spark Maven:

<dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.12</artifactId>
        <version>2.4.1</version>
</dependency>
两种创建RDD的方法DEMO:
package demo;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import java.util.Arrays;
/**
 * Created by Main on 2019/4/20.
 */
public class HelloJavaSpark {
     public static void main(String[] args) {
        //JavaSparkContext 对象代表和一个集群的连接 Driver programs通过SparkContext对象访问spark
        SparkConf conf = new SparkConf().setMaster("local").setAppName("MyApp");
        JavaSparkContext sc = new JavaSparkContext(conf);
        //a获取数据集 在驱动器程序里分发驱动器程序中的对象集合
        JavaRDD<Integer> disData = sc.parallelize(Arrays.asList(1,2,3,4,5));
        //转化操作 生成新的RDDS
        JavaRDD<Integer> otherData = disData.filter(x->x==3);
        //执行操作
        System.out.println(otherData.count());
        //取出Rdds里面的部分数据
        //task 或者 collect()都能取出数据
        //通常不用 task collect 而是把数据存在HDFS 分布式存储系统中
        for (Integer integer : otherData.collect()){
            System.out.println(integer);
        }

        //a读取一个外部数据集
        JavaRDD<String> textData = sc.textFile("C:/Users/Main/Desktop/README.md");
        System.out.println("result:"+textData.first());
    }
}
Map和filter的DEMO:

Map:将函数应用于RDD中的每个元素,将返回值构成新的RDD
filter:返回一个通过传给filter()的函数的元素组成的RDD

package demo;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

import java.util.Arrays;

/**
 * Created by Main on 2019/4/20.
 */
public class MapFilter {

    public static void main(String[] args) {
        //JavaSparkContext 对象代表和一个集群的连接 Driver programs通过SparkContext对象访问spark
        SparkConf conf = new SparkConf().setMaster("local").setAppName("MyApp");
        JavaSparkContext sc = new JavaSparkContext(conf);
        //a获取数据集 在驱动器程序里分发驱动器程序中的对象集合
        JavaRDD<Integer> disData = sc.parallelize(Arrays.asList(1,2,3,4,5));
        JavaRDD<Integer> mappedRdd = disData.map(x->x*x);
        JavaRDD<Integer> filteredRdd = disData.filter(x->x!=1);
        for(Integer integer:mappedRdd.collect()){
            System.out.println(integer);
        }
        filteredRdd.collect().forEach(item-> System.out.println(item));
    }
}
flatMap的DEMO:

将函数应用于RDD中的每个元素,将返回的迭代器的所有内容构成新的RDD。通常用来切分单词。

package demo;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import scala.Tuple2;

import java.util.*;

/**
 * Created by Main on 2019/4/20.
 */
public class WordCount {

    public static void main(String[] args) {
        SparkConf conf = new SparkConf().setMaster("local").setAppName("MyApp");
        JavaSparkContext sc = new JavaSparkContext(conf);

        JavaRDD<String> lines = sc.textFile("C:/Users/Main/Desktop/README.md");
        JavaRDD<String> words = lines.flatMap(line->Arrays.asList(line.split(" ")).iterator());
        JavaPairRDD counts = words.mapToPair(w->new Tuple2(w,1)).reduceByKey((x,y)-> (Integer)x + (Integer)y);
        counts.saveAsTextFile("C:/Users/Main/Desktop/helloSpark");

    }

}

其他转化操作:distinct(),sample(),union(),intersectiom(),subtract(),cartesian()

转载于:https://www.cnblogs.com/Jmmm/p/10741001.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值