spark01-创建RDD

  1. parallelize方法
java 复制代码
# 参数分别为List<T>,numSlices:参数用于指定将数据集切分成多少个分区
# Spark 推荐的分区数通常是物理核心数的 2-4 倍。
JavaRDD<Integer> rdd1 = sc.parallelize(Arrays.asList(1,2,3,4,5),1)
# 相对于parallelize通用性,偏重于Double类型,如果数据为double类型,性能较快
JavaDoubleRDD rdd2 = sc.parallelizeDoubles(Arrays.asList(1.0,2.0,3.0),1)
# 生成键值对类型的RDD
JavaPairRDD<String,Integer> rdd3 = sc.parallelizePairs(Arrays.asList(new Tuple2<String,Integer>("tom",12),new Tuple2<String,Integer>("jack",13)))
# 实体类,实体类需要实现序列化
JavaRDD<User> rdd4 = sc.parallelize(Arrays.asList(new User("tom",12),new User("jack",13)))

# 注意,Java只有生成PairRDD键值对类型才能使用reduceByKey等<K,V>方法
JavaRDD<Tuple2<String,Integer>> rdd5 = sc.parallelize(Arrays.asList(new Tuple2<String,Integer>("tom",12),new Tuple2<String,Integer>("jack",13)))
# rdd5不是键值对类型,通过mapToPair转为JavaPariRdd<String,Integer>,虽然二者很像,但是不相同
JavaPairRDD<String,Integer> rdd6 = rdd5.mapToPair(x->new Tuple2(x._1(),x._2()))
# PairRDD这种以对象作为主键的,需要针对对象重写equals和hashCode方法,并且需要实现序列化类
JavaPairRDD<User,Double> rdd7 = sc.parallelizePari(Arrays.asList(new Tuple2<User,Double>(new User("tom",12),85),new Tuple2<User,Double>(new User("tom",12),90)))

    @Override
    public boolean equals(Object o) {
        if (o == null || getClass() != o.getClass()) return false;
        Employee employee = (Employee) o;
        return Objects.equals(id, employee.id) && Objects.equals(name, employee.name) && Objects.equals(age, employee.age);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, age);
    }
python 复制代码
# python只提供了方法parallize(self,c,numSlices),python泛型机制
rdd1 = sc.parallelize([1,2,3,4,5],1)
rdd2 = sc.parallelize([1.0,2.0,3.0],2)
rdd3 = sc.parallelize([("tom",12),("jack",13)])
rdd4 = sc.parallelize([User("tom",12),User("jack",13)])
# rdd1虽然不是<K,V>型,但是依然提供了groupByKey方法,但是运行报错
# 注意,python也支持<K,V>其中K为实体,但是需要实现__eq__和__hash__方法
    def __eq__(self, other):
        if not isinstance(other,Employee):
            return False
        return self.name == other.name and self.age == other.age
    def __hash__(self):
        return hash((self.name, self.age))
  1. 通过读取文件创建RDD
java 复制代码
// 1. textFile(文件路径,最小分区数):如果实际分区小于最小分区数,按照最小分区数分区,否则落在最小分区数-理想分区数之间,如果想要强行修改分区,coalesce()是个不错方法,不涉及shuffle,但是容易造成数据倾斜
JavaRDD<String> rdd1 = sc.textFile(filePath,minPartitions)
// 2. wholeTextFiles-->返回(filename,content)
// 文件夹logs 01.txt
// 01.txt内容如下  
hello world
this is world
// 02.txt
this is world
hello world 
JavaPairRDD<String,String> rdd2 = sc.wholeTextFiles();
// 返回
01.txt hello world\nthis is world
02.txt this is world\nhello world
java 复制代码
# python版本
data = sc.textFile(path)
data1 = sc.wholeTextFiles(path)
相关推荐
爱吃香菜的初学者20 分钟前
十四.Linux——消息队列
linux·运维·开发语言
迅猛龙办公室35 分钟前
python实现倒序输出数字
开发语言·python
仿生狮子3 小时前
OpenAI 攻下千禧年难题之后,开发者似乎无动于衷
前端·数学·vibecoding
Lvan的前端笔记7 小时前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker
三天不学习7 小时前
Egg.js 4 突然爆火,原因是否归结于AI 原生落地需求爆发?
前端·javascript·全栈·egg.js
Apipi*7 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
xcs194058 小时前
前端 vue 的前端页面debugger 进不去
前端·javascript·vue.js
天启HTTP8 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
明月_清风9 小时前
Deno 终局来了:从挑战 Node 到被 Cloudflare 收编
前端·后端·node.js
Csvn10 小时前
框架性能优化
前端