如何减少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) :43: error: could not找到参数 num 的隐含值:Numeric[String] val sumed = grouped_final_resultMap1.mapcase (str, nums) => (str, nums.sum) ??? “grouped_final_resultMap”和“grouped_final_resultMap1”有什么区别吗?您是否交换了字符串和 compactBuffers 或类似的顺序? 相同。我也刚刚尝试成功地将数字设置为 toFloat 以便它们浮动,然后再次进行映射:scala> val sumed = final_resultMap1.mapcase (str, nums) => (str, nums.sum) :41: 错误:值 sum 不是 Float val sumed = final_resultMap1.mapcase (str, nums) => (str, nums.sum) 的成员 可以开个聊天室吗? final_resultMap1 又是RDD[(String, Iterable[Float])]? (如果我们在这里发布更多的 cmets,它会给我一个聊天室的链接)

以上是关于如何减少scala中的紧凑缓冲区?的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow 对象检测 API 被杀死 - OOM。如何减少洗牌缓冲区的大小?

Scala中的矩阵到CSV

如何创建一个紧密打包的无符号字节统一缓冲区?

如何在从 ensime 启动的 Scala REPL 中自动完成?

双缓冲队列-减少生产者消费者锁的调用

通过双缓冲区减少闪烁:SetStyle 与覆盖 CreateParam