【问题标题】:How to union two different size RDD如何联合两个不同大小的RDD
【发布时间】:2015-04-13 16:03:56
【问题描述】:

现在我有两个这样的 RDD(数组):

1,2

3,4

第二个是这样的

5,6,7

8,9,10

现在我使用 rdd1.union(rdd2) 结果是这样的:

1,2

3,4

5,6,7

8,9,10

但是我想要的结果是这样的:

1,2,0

3,4,0

5,6,7

8,9,10

我只是想得到一个数组,其行具有相同数量的元素,并且新元素设置为0

我想知道如何解决这个问题?

【问题讨论】:

  • 映射到你的第一个 RDD 并添加一个额外的 0 元素。然后将其与第二个 RDD 联合?

标签: scala apache-spark rdd


【解决方案1】:

你几乎做了你想做的事!一般的解决方案是:您只需将第一个 Rdd 映射到与第二个 rdd 相同的结构。我建议使用元组和类型别名来使您的代码更清晰。比方说:

import org.apache.spark.rdd.RDD
type X = Double
type Y = Double
type Z = Double
val rdd1: RDD[(X, Y)] = sc.parallelize(List((1,2), (3,4)))
val rdd2: RDD[(X,Y,Z)] = sc.parallelize(List((5,6,7), (8,9,10)))
val result: RDD[(X,Y,Z)] = rdd1
  .map { 
    case(x,y) => (x, y, 0.0)
  }
  .union(rdd2)

但是,如果您不确定长度,请使用数组,将它们映射到其他数组中,然后使用零和联合。

【讨论】:

  • 我对答案投了赞成票,因为我完全同意你将第一个 RDD 结构映射到第二个结构,但类型别名不是必需的。
  • 你说得对,没必要。但我认为在使用 Rdd 的情况下提及这个技巧并没有害处。如果您有很多 RDD[(Int, Int, Int)] ,那么很快就会变得非常不清楚 RDD[(Int, Int, Int)] 的含义。其他方法是使用 Dataframe。
猜你喜欢
  • 1970-01-01
  • 2016-08-05
  • 2013-02-03
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
相关资源
最近更新 更多