Spark:将一个数组除以另一个数组中的元素

时间:2017-02-08 08:44:13

标签: scala apache-spark

我是Apache Spark和Scala的新手。我想在这里理解一些事情: -

我有一个数组:

Companies= Array(
  (Microsoft,478953), 
  (IBM,332042), 
  (JP Morgan,226003), 
  (Google,342033)
)

我想把它除以另一个数组,逐个元素:

Count = Array((Microsoft,4), (IBM,3), (JP Morgan,2), (Google,3))

我使用了这段代码:

val result: Array[(String, Double)] = wordMapCount
  .zip(letterMapCount)
  .map { case ((letter, wc), (_, lc)) => (letter, lc.toDouble / wc) }

从这里开始:Divide Arrays 这有效。但是,我不明白。为什么zip需要第二个数组而不是第一个数组也匹配如何在这里工作?

1 个答案:

答案 0 :(得分:1)

  

为什么zip需要第二个数组而不是第一个?

因为拉链是如何工作的。它需要两个单独的ID Name Item 3 Someone 31.1 3 Someone 11.1 3 Someone 12.2 3 Someone 43.2 个实例,并将一个映射到另一个,以创建第一个和第二个元素的对:

RDD
  

案例匹配如何在这里工作

你有两个元组:

def zip[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)]

这个部分函数通过调用(Microsoft, 478953), (Microsoft,4) 来分解元组类型。这样:

Tuple2.unapply

表示"将第一个元组中的第一个参数(case ((letter, wc), (_, lc)) )提取为名为_1的新值,将第二个参数(letter)提取到名为的新值_2。第二个元组也是如此。然后,它创建一个新元组,其中wc为第一个值,letterlc为第二个参数。