如何减少scala中的紧凑缓冲区?
Posted
技术标签:
【中文标题】如何减少scala中的紧凑缓冲区?【英文标题】:How to reduce a compact buffer in scala? 【发布时间】:2018-07-21 19:17:02 【问题描述】:这是我的 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]
中的所有项目。
谁能告诉我该怎么做?
非常感谢。
更新:
这里是 repl 会话:
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.mapcase (str, nums) => (str, nums.sum)
如果给出以下错误:
<console>:41: error: value sum is not a member of Float
val sumed = final_resultMap1.mapcase (str, nums) => (str, nums.sum)
谢谢。
【问题讨论】:
【参考方案1】:由于CompactBuffer
扩展了Iterable
,并且Iterable
有一个方法sum
,它应该很简单:
grouped_final_resultMap.map
case (str, nums) => (str, nums.sum)
但是,请确保您没有错过在之前的某个步骤中执行此关联归约操作的机会。
从您的 EDIT 中可以看出,您根本不想对 grouped_final_resultMap1 做任何事情,而是想要类似
final_resultMap1.reduceByKey((_: Float) + (_: Float))
或者只是
final_resultMap1.reduceByKey(_ + _)
简称。
【讨论】:
感谢您的快速回复:scala> val sumed = grouped_final_resultMap1.mapcase (str, nums) => (str, nums.sum)final_resultMap1
又是RDD[(String, Iterable[Float])]
? (如果我们在这里发布更多的 cmets,它会给我一个聊天室的链接)以上是关于如何减少scala中的紧凑缓冲区?的主要内容,如果未能解决你的问题,请参考以下文章
TensorFlow 对象检测 API 被杀死 - OOM。如何减少洗牌缓冲区的大小?