我是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需要第二个数组而不是第一个数组也匹配如何在这里工作?
答案 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
为第一个值,letter
和lc
为第二个参数。