【问题标题】:is it possible to create a parallel operations inside one partition of spark?是否可以在一个火花分区内创建并行操作?
【发布时间】:2016-07-27 01:24:54
【问题描述】:

我是 spark 及其相关概念的新手,所以请善待我并帮助我解决我的疑问,我会给你一个例子来帮助你理解我的问题。

我有一个 javaPairRDD "rdd",其中包含像这样的元组

Tuple2 <Integer,String[]>

让我们假设 String[].length =3,意味着它除了键之外还包含 3 个元素,我想要做的是使用 3 个 RDD 和 3 个操作“R1”和“operation1”更新向量的每个元素用于修改第一个元素,“R2”和“operation2”用于修改第二个元素,“R3”和“operation3”用于修改第三个元素,

R1、R2、R3是提供元素新值的RDD

我知道 spark 将数据(在这个例子中是“rdd”)分成许多分区,但我要问的是:是否可以在同一个分区中同时执行不同的操作?

根据我的例子,因为我有3个操作,这意味着我可以同时取3个元组而不是只取一个来操作它:

我想要的治疗是:(t指时间)

at t=0:
*tuple1=use operation1 to modify the element 1 

*tuple2=use operation2 to modify the element2 

*tuple3=use operation3 to modify the element 3 

在 t=1:

 *tuple1=use operation2 to modify the element 2 

 *tuple2=use operation3 to modify the element3 

 *tuple3=use operation1 to modify the element 1 

在 t=2:

*tuple1=use operation.3 to modify the element 3

*tuple2=use operation1 to modify the element1 

*tuple3=use operation2 to modify the element 2

完成更新前 3 个元组后,我从同一个分区中取出其他(3 个元组)来处理它们,依此类推..

请善待,这只是我脑海中闪过的一个想法,我想知道是否可以这样做,谢谢您的帮助

【问题讨论】:

  • 看看mapPartitions - 它可能对你有点帮助
  • 我投了反对票,因为我认为您需要花更多时间阅读 spark 文档和概念。在这种状态下,这个问题在imo中几乎没有意义。

标签: java scala apache-spark key-value rdd


【解决方案1】:

Spark 不保证执行顺序。

您决定应该如何转换 RDD 的各个元素,Spark 负责以它认为最有效的方式将转换应用于所有元素。

根据您的环境中可用的执行程序(即线程或服务器或两者)的数量,Spark 实际上会同时处理尽可能多的元组。

【讨论】:

  • 非常感谢@Tomasz Błachut,我非常了解这一切都取决于核心(执行者)的数量,但我在想也许同一个核心可以同时处理许多元组,但是在你的回答之后,我认为它没有任何意义,bcz spark已经这样做了
【解决方案2】:

首先,欢迎来到 Spark 社区。​​p>

为了补充@Tomasz Błachut 的答案,Spark 的执行上下文不会将节点(例如一台计算 PC)识别为单独的处理单元,而是将它们的核心。因此,一个作业可以分配给 22 核 Xeon 上的两个核心,而不是整个节点。

但就效率和性能而言,Spark EC 确实将节点视为计算单元;因为这与在性能不同的节点之间划分更大的作业或将它们列入黑名单(如果它们很慢或经常失败)有关。

【讨论】:

  • 非常感谢@sebszyller,我非常了解这一切都取决于核心(执行者)的数量,但我在想也许同一个核心可以同时处理许多元组,但是在你的回答之后,我认为它没有任何意义,bcz spark已经这样做了。
猜你喜欢
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多