如何减少 Scala 中的紧凑型缓冲区?
How to reduce a compact buffer in scala?
这是我的 RDD:
scala> grouped_final_resultMap.first
res20: (String, Iterable[Float]) = (2014-02-01,CompactBuffer(239.96, 129.99, 49.98, 100.0, 399.98))
我想要做的是总结该 RDD 的 _2
-nd 组件中 Iterable[Float]
中的所有项目。
谁能告诉我该怎么做?
非常感谢。
更新:
这是回复会话:
scala> final_result.take(20).foreach(println)
2828,2013-08-10,129.99
43399,2014-04-20,100.0
43399,2014-04-20,129.99
43399,2014-04-20,49.98
8989,2013-09-19,119.97
...
scala> val final_resultMap1 = final_result.map(x=>(x.split(",")(1), x.split(",")(2).toFloat))
scala> grouped_final_resultMap1.first
res34: (String, Iterable[Float]) = (2014-02-01,CompactBuffer(239.96, 129.99, ...
val sumed = final_resultMap1.map{case (str, nums) => (str, nums.sum)}
如果报错如下:
<console>:41: error: value sum is not a member of Float
val sumed = final_resultMap1.map{case (str, nums) => (str, nums.sum)}
谢谢。
因为CompactBuffer
extends Iterable
, and Iterable
有一个方法sum
,它应该很简单:
grouped_final_resultMap.map{
case (str, nums) => (str, nums.sum)
}
但是,请确保您没有错过在前面的某个步骤中执行此关联归约操作的机会。
从您的编辑中可以看出,您根本不想对 grouped_final_resultMap1 做任何事情,而是想要
final_resultMap1.reduceByKey((_: Float) + (_: Float))
或者只是
final_resultMap1.reduceByKey(_ + _)
简称。
这是我的 RDD:
scala> grouped_final_resultMap.first
res20: (String, Iterable[Float]) = (2014-02-01,CompactBuffer(239.96, 129.99, 49.98, 100.0, 399.98))
我想要做的是总结该 RDD 的 _2
-nd 组件中 Iterable[Float]
中的所有项目。
谁能告诉我该怎么做?
非常感谢。
更新:
这是回复会话:
scala> final_result.take(20).foreach(println)
2828,2013-08-10,129.99
43399,2014-04-20,100.0
43399,2014-04-20,129.99
43399,2014-04-20,49.98
8989,2013-09-19,119.97
...
scala> val final_resultMap1 = final_result.map(x=>(x.split(",")(1), x.split(",")(2).toFloat))
scala> grouped_final_resultMap1.first
res34: (String, Iterable[Float]) = (2014-02-01,CompactBuffer(239.96, 129.99, ...
val sumed = final_resultMap1.map{case (str, nums) => (str, nums.sum)}
如果报错如下:
<console>:41: error: value sum is not a member of Float
val sumed = final_resultMap1.map{case (str, nums) => (str, nums.sum)}
谢谢。
因为CompactBuffer
extends Iterable
, and Iterable
有一个方法sum
,它应该很简单:
grouped_final_resultMap.map{
case (str, nums) => (str, nums.sum)
}
但是,请确保您没有错过在前面的某个步骤中执行此关联归约操作的机会。
从您的编辑中可以看出,您根本不想对 grouped_final_resultMap1 做任何事情,而是想要
final_resultMap1.reduceByKey((_: Float) + (_: Float))
或者只是
final_resultMap1.reduceByKey(_ + _)
简称。