Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >查找RDD[T]中有键的RDD[(T,U)]元素

查找RDD[T]中有键的RDD[(T,U)]元素
EN

Stack Overflow用户
提问于 2016-03-17 20:28:00
回答 2查看 121关注 0票数 1

给定的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val as: RDD[(T, U)]
val bs: RDD[T]

我想对as进行筛选,以查找具有bs键的元素。

一种方法是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val intermediateAndOtherwiseUnnessaryPair = bs.map(b => b -> b)
bs.join(as).values

但是,bs上的映射是不幸的。有没有更直接的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-17 22:05:15

通过执行以下操作,可以减少映射的不必要性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val intermediateAndOtherwiseUnnessaryPair = bs.map(b => (b, 1))

此外,加入前的共同分区也有很大帮助:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val intermediateAndOtherwiseUnnessaryPair = bs.map(b => (b, 1)).paritionBy(new HashPartitioner(NUM_PARTITIONS))

bs.paritionBy(new HashPartitioner(NUM_PARTITIONS)).join(as).values

Co分区的RDDs将不会在运行时被洗牌,因此您将看到显著的性能提升。

如果bs太大(更准确地说,有大量的唯一值),广播可能无法工作,您也可能希望增加driver.maxResultsize

票数 2
EN

Stack Overflow用户

发布于 2016-03-17 20:48:45

使用第二个RDD过滤一个RDD的流行和通用方法只有两种(或者至少是我所知道的唯一一种):

1)您已经在做的join --在本例中,我不太担心不必要的中间RDD,不过,map()是一个很窄的转换,不会引入那么多开销。然而,join()本身很可能是缓慢的,因为它是一个广泛的转换(需要洗牌)

2)在驱动程序上收集bs并使其成为广播变量,然后在as.filter()中使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val collected = sc.broadcast(bs.collect().toSet)
as.filter(el => collected.value.contains(el))

您需要这样做,因为Spark不支持在调用RDDs的方法中嵌套RDD

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36076144

复制
相关文章
【Python】PySpark 数据计算 ④ ( RDD#filter 方法 - 过滤 RDD 中的元素 | RDD#distinct 方法 - 对 RDD 中的元素去重 )
RDD#filter 方法 可以 根据 指定的条件 过滤 RDD 对象中的元素 , 并返回一个新的 RDD 对象 ;
韩曙亮
2023/10/11
5010
【Python】PySpark 数据计算 ④ ( RDD#filter 方法 - 过滤 RDD 中的元素 | RDD#distinct 方法 - 对 RDD 中的元素去重 )
Spark核心RDD、什么是RDD、RDD的属性、创建RDD、RDD的依赖以及缓存、
1:什么是Spark的RDD??? RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。 2:RDD的属性: a、一组分片(Partition),即数据集的基本组成单位。对于RDD来说,每个分片都会被一个计算任务处理,
别先生
2018/04/02
1.2K0
Spark核心RDD、什么是RDD、RDD的属性、创建RDD、RDD的依赖以及缓存、
【Python】PySpark 数据计算 ⑤ ( RDD#sortBy方法 - 排序 RDD 中的元素 )
RDD#sortBy 方法 用于 按照 指定的 键 对 RDD 中的元素进行排序 , 该方法 接受一个 函数 作为 参数 , 该函数从 RDD 中的每个元素提取 排序键 ;
韩曙亮
2023/10/11
5120
【Python】PySpark 数据计算 ⑤ ( RDD#sortBy方法 - 排序 RDD 中的元素 )
RDD操作—— 键值对RDD(Pair RDD)
“键值对”是一种比较常见的RDD元素类型,分组和聚合操作中经常会用到。 Spark操作中经常会用到“键值对RDD”(Pair RDD),用于完成聚合计算。普通RDD里面存储的数据类型是Int、String等,而“键值对RDD”里面存储的数据类型是“键值对”。
羊羽shine
2019/08/21
3K0
spark RDD
RDD,全称为Resilient Distributed Datasets(弹性分布式数据集),是一个容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。同时,RDD还提供了一组丰富的操作来操作这些数据。在这些操作中,诸如map、flatMap、filter等转换操作实现了函数式编程模式,很好地契合了Scala的集合操作。除此之外,RDD还提供了诸如join、groupBy、reduceByKey等更为方便的操作(注意,reduceByKey是action,而非transformation),以支持常见的数据运算。
小石头
2022/11/10
4700
spark RDD
[spark] RDD解析
每个具体的RDD都得实现compute 方法,该方法接受的参数之一是一个Partition 对象,目的是计算该分区中的数据。 我们通过map方法来看具体的实现:
UFO
2018/09/04
5840
[spark] RDD解析
RDD — flatmap
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139838.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/23
3440
Spark——RDD
全称为Resilient Distributed Datasets,弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变,可分区,里面的元素可并行计算的集合。RDD在逻辑上是一个数据集,在物理上则可以分块分布在不同的机器上并发运行。RDD允许用户在执行多个查询时显示的将工作缓存在内存中,后续的查询能够重用工作集,这极大的提升了查询速度。 在Spark 中,对数据的所有操作不外乎创建RDD,转换已有RDD以及调用RDD操作进行求值,每个RDD都被分为多个分区,这些分区运行在集群的不同节点上,RDD可以包含Python,Java,Scala中任意类型的对象,甚至可以是用户自定义对象。 RDD是Spark的核心,也是整个Spark的架构基础。它的特性可以总结如下:
羊羽shine
2019/08/08
6630
RDD 编程
spark 遇到 RDD action 时才会真正的开始执行,遇到转换的时候,只是记录下来,并不真正执行
Michael阿明
2021/09/06
4610
Spark RDD
弹性分布式数据集(RDD)不仅仅是一组不可变的JVM(Java虚拟机) 对象的分布集,可以让你执行高速运算,而且是Apark Spark的核心。
week
2018/12/07
4970
Spark RDD的Shuffle
Shuffle的概念来自Hadoop的MapReduce计算过程。当对一个RDD的某个分区进行操作而无法精确知道依赖前一个RDD的哪个分区时,依赖关系变成了依赖前一个RDD的所有分区。比如,几乎所有<key, value>类型的RDD操作,都涉及按key对RDD成员进行重组,将具有相同key但分布在不同节点上的成员聚合到一个节点上,以便对它们的value进行操作。这个重组的过程就是Shuffle操作。因为Shuffle操作会涉及数据的传输,所以成本特别高,而且过程复杂。 下面以reduceByKey为例来介
天策
2018/06/22
6540
Spark RDD 基础
[图片摘自[Spark 官网](http://spark.apache.org/)]
李振
2021/11/26
5620
Spark RDD 基础
SparkCore之RDD
https://blog.csdn.net/zym1117/article/details/79532458
用户1483438
2022/04/26
6700
spark——spark中常说RDD,究竟RDD是什么?
在上一讲当中我们在本地安装好了spark,虽然我们只有local一个集群,但是仍然不妨碍我们进行实验。spark最大的特点就是无论集群的资源如何,进行计算的代码都是一样的,spark会自动为我们做分布式调度工作。
TechFlow-承志
2020/04/14
6980
spark——spark中常说RDD,究竟RDD是什么?
Spark RDD的Transformation
RDD的Transformation是指由一个RDD生成新RDD的过程,比如前面使用的flatMap、map、filter操作都返回一个新的RDD对象,类型是MapPartitionsRDD,它是RDD的子类。 所有的RDD Transformation都只是生成了RDD之间的计算关系以及计算方法,并没有进行真正的计算。下面还是以WordCount为例进行介绍: val textFile = sc.textFile("README.md") val words = textFile.flatMap(line
天策
2018/06/22
3850
【Python】PySpark 数据输入 ① ( RDD 简介 | RDD 中的数据存储与计算 | Python 容器数据转 RDD 对象 | 文件文件转 RDD 对象 )
RDD 英文全称为 " Resilient Distributed Datasets " , 对应中文名称 是 " 弹性分布式数据集 " ;
韩曙亮
2023/10/11
5160
【Python】PySpark 数据输入 ① ( RDD 简介 | RDD 中的数据存储与计算 | Python 容器数据转 RDD 对象 | 文件文件转 RDD 对象 )
什么是RDD?带你快速了解Spark中RDD的概念!
看了前面的几篇Spark博客,相信大家对于Spark的基本概念以及不同模式下的环境部署问题已经搞明白了。但其中,我们曾提到过Spark程序的核心,也就是弹性分布式数据集(RDD)。但到底什么是RDD,它是做什么用的呢?本篇博客,我们就来详细讨论它们的使用情况。
大数据梦想家
2021/01/27
3.1K0
什么是RDD?带你快速了解Spark中RDD的概念!
Spark RDD详解
RDD(Resilient Distributed Datasets)弹性的分布式数据集,又称Spark core,它代表一个只读的、不可变、可分区,里面的元素可分布式并行计算的数据集。
大数据学习与分享
2020/08/10
8240
Spark RDD详解
Spark RDD的Action
RDD的Action是相对Transformation的另一种操作。Transformation代表计算的中间过程,从一个RDD生成新的RDD;而Action代表计算的结束,一次Action调用之后,不再生成新的RDD,结果返回到Driver程序。 鉴于Action具有这样的特点,所以Action操作是不可以在RDD Transformation内部调用的。比如,下面的调用是不允许的: rdd1.map(x => rdd2.values.count() * x) Transformation只是建立计算关
天策
2018/06/22
7360
Spark Core入门2【RDD的实质与RDD编程API】
所以RDD不过是对一个函数的封装,当一个函数对数据处理完成后,我们就得到一个RDD的数据集(是一个虚拟的,后续会解释)。
Java架构师必看
2021/05/14
1.1K0
Spark Core入门2【RDD的实质与RDD编程API】

相似问题

将RDD[ RDD[T] ]转换为RDD[T]

12

将RDD[T]过滤为T类型的子类

10

星星之火:如何将RDD[T]‘拆分为Seq[RDD[T]]并保持顺序

11

在没有编译警告的情况下从RDD[Try[T]]获取RDD的Failure[T]

10

值联接不是org.apache.spark.rdd.RDD[(Long,T)]的成员

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文