RDD操作(5)

1.join在Spark中的应用

(1)join至少需要2个数据集。

结果分析,A、C这些就相当于join的条件,这是inner join只返回左右都匹配上的。

(2)leftOuterjoin

结果分析:left左边有的都需要列出来,但右边不一定有,没有的就是None。

 Array[(String, (String, Option[String]))] = Array((F,(f1,None)), (F,(f1,None)), (D,(d1,None)), (A,(a1,Some(a2))), (C,(c1,Some(c2))), (C,(c1,Some(c3))))

(3)rightjoin

结果分析:rightjoin,右边的全都输出,左边有的some()输出,没有的就None。

 Array[(String, (Option[String], String))] = Array((A,(Some(a1),a2)), (C,(Some(c1),c2)), (C,(Some(c1),c3)), (E,(None,e1)))
(4)fullouterJoin

结果分析:注意看数据结构,俩个option因为你不知道那个有,那个没有,在工作一定得预先知道join的结果,有哪些列,需要那些字段。

Array[(String, (Option[String], Option[String]))] = Array((F,(Some(f1),None)), (F,(Some(f1),None)), (D,(Some(d1),None)), (A,(Some(a1),Some(a2))), (C,(Some(c1),Some(c2))), (C,(Some(c1),Some(c3))), (E,(None,Some(e1))))

2.substract

Return an RDD with the elements from `this` that are not in `other`.

就是一个减法,常用在俩个DF想减之上。

3.intersection

返回俩个都有的交集

4.cartesian

就是俩个做笛卡儿积,(a,b)这样都去组成。

spark-shell只是用于做一些简单的测试,IDEA才是用来做开发的。

### Python 中使用 RDD操作指南 在 Spark 大数据处理框架中,RDD 是其核心抽象概念之一。以下是关于如何在 Python 中利用 RDD 进行大数据处理的相关说明。 #### 创建 RDD 可以通过两种方式创建 RDD:从本地集合或外部存储文件加载数据。 ```python from pyspark import SparkContext sc = SparkContext("local", "RDD Example") # 方法一:从列表创建 RDD data_list = [1, 2, 3, 4, 5] rdd_from_list = sc.parallelize(data_list) # 方法二:从文件创建 RDD (假设有一个名为 'input.txt' 的文件) rdd_from_file = sc.textFile("input.txt") ``` 以上代码展示了如何通过 `parallelize` 和 `textFile` 函数分别从内存中的列表和磁盘上的文件创建 RDD[^1]。 #### 转换操作(Transformation) 转换操作是对原始 RDD 数据应用函数并返回新的 RDD。常见的转换操作如下: - **map**: 对每个元素执行指定的操作,并返回一个新的 RDD。 ```python mapped_rdd = rdd_from_list.map(lambda x: x * 2) ``` 此代码片段将原 RDD 中的每一个数值乘以 2 并生成新 RDD[^1]。 - **filter**: 筛选出满足条件的元素形成的新 RDD。 ```python filtered_rdd = rdd_from_list.filter(lambda x: x % 2 == 0) ``` 该语句筛选出偶数项作为结果集的一部分[^1]。 - **flatMap**: 类似 map,但它会把结果展平成单个序列。 ```python flat_mapped_rdd = sc.parallelize(["hello world"]).flatMap(lambda line: line.split(" ")) ``` 这里演示的是将字符串拆分成单词的过程[^1]。 #### 动作操作(Action) 动作操作用于触发实际计算并将最终结果返回给驱动程序或者保存到外部存储器里去。 - **collect**: 将整个 RDD 收集至驱动端作为一个数组展示出来。 ```python result = mapped_rdd.collect() print(result) # 输出 [2, 4, 6, 8, 10] ``` 这段脚本调用了 collect() 来获取映射后的全部内容[^1]。 - **count**: 统计当前 RDD 所含有的记录总数。 ```python total_count = filtered_rdd.count() print(total_count) ``` 此处统计了过滤之后剩余条目的数量。 - **saveAsTextFile**: 把 RDD 存储为文本文件形式存放在 HDFS 或者其他支持路径下。 ```python filtered_rdd.saveAsTextFile("/output/path/") ``` 这条命令将会把经过 filter 后的结果写入指定目录下的多个部分文件当中[^1]。 #### RDD 属性与持久化策略 除了基本的操作外,还可以设置一些参数来优化性能表现。例如缓存机制能够减少重复运算带来的开销;而 partition 则决定了任务分配粒度大小等问题都需要考虑进去。 ```python cached_rdd = rdd_from_list.cache() # 缓存 RDD 至内存 persisted_rdd = cached_rdd.persist(storageLevel="MEMORY_AND_DISK") # 自定义存储级别 repartitioned_rdd = persisted_rdd.repartition(10).coalesce(5) # 修改分区数目 ``` 这些方法有助于提升大规模分布式环境下的运行效率以及资源利用率等方面做出调整[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值