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)
相关推荐
ruofu331 分钟前
wsl端是py312,但是项目是py311, 如何下载py311的依赖包(wheels)
python·docker
Kina_C9 分钟前
Linux DNS 服务器-从高速缓存到辅助 DNS 部署指南
linux·运维·服务器·dns
suaizai_21 分钟前
TypeScript 7 正式发布!Vue 暂被 “拒之门外“ !!!
linux·运维·ubuntu
小大宇24 分钟前
python flask框架 SSE流式返回、跨域、报错
开发语言·python·flask
像风一样的男人@36 分钟前
python --fastapi推流AI推理
人工智能·python·fastapi
2601_956319881 小时前
最新量化开发卡住,先查规则和流程是否完整
人工智能·python
刘卓航众创芯云服务部1 小时前
Kimi K3复杂任务实测:我把团队最头疼的三个场景全跑了一遍
前端
cll_8692418911 小时前
一个好看的Wordpress博客文字css样式
前端·css·ui
武子康1 小时前
Shippy:确定性工具、会话级 Sandbox 与 Live-Data Eval(4 类收敛 + 7 步实现方案 + 6 类评测指标)
前端·人工智能·后端