mit*_*hus 5 scala apache-spark
在Spark 1.3中,有没有办法从中访问密钥mapValues?
具体来说,如果我有
val y = x.groupBy(someKey)
val z = y.mapValues(someFun)
Run Code Online (Sandbox Code Playgroud)
可以someFun知道它目前在哪个关键操作?
或者我必须这样做
val y = x.map(r => (someKey(r), r)).groupBy(_._1)
val z = y.mapValues{ case (k, r) => someFun(r, k) }
Run Code Online (Sandbox Code Playgroud)
注意:我想使用mapValues而不是map保留分区的原因.
在这种情况下,您可以使用mapPartitions该preservesPartitioning属性.
x.mapPartitions((it => it.map { case (k,rr) => (k, someFun(rr, k)) }), preservesPartitioning = true)
Run Code Online (Sandbox Code Playgroud)
您只需要确保不要更改分区,即不要更改密钥.
您不能将密钥与 一起使用mapValues。但您可以使用mapPartitions.
val pairs: Rdd[(Int, Int)] = ???
pairs.mapPartitions({ it =>
it.map { case (k, v) =>
// your code
}
}, preservesPartitioning = true)
Run Code Online (Sandbox Code Playgroud)
请注意实际保留分区,编译器将无法检查它。
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |