【发布时间】:2016-02-25 07:06:41
【问题描述】:
假设我有一个键值对,其中包含一个 userId 和一个布尔整数列表,表明用户有一个属性:
userId hasAttrA hasAttrB hasAttrC
joe 1 0 1
jack 1 1 0
jane 0 0 1
jeri 1 0 0
在 Scala 代码中,数据结构如下所示:
var data = Array(("joe", List(1, 0, 1)),
("jack", List(1, 1, 0)),
("jane", List(0, 0, 1)),
("jeri", List(1, 0, 0)))
我想计算具有属性的所有用户的比例。但是,这种计算要求我可以总结所有的键,我不知道该怎么做。所以我想计算一下:
- 有多少用户?
data.size // 4
- 有多少用户具有属性 A?
应该是:sum(hasAttrA) / data.size = 3/4 = 0.75
- 有多少部分用户具有属性 B?
应该是:sum(hasAttrB) / data.size = 1/4 = 0.25
等等
如何计算所有键的总和,以及如何计算最终百分比?
2016 年 2 月 24 日编辑:
我可以像这样手动找到各个列的总和:
var sumAttributeA = data.map{ case(id, attributeList) => attributeList(0)}.sum
var sumAttributeB = data.map{ case(id, attributeList) => attributeList(1)}.sum
var sumAttributeC = data.map{ case(id, attributeList) => attributeList(2)}.sum
var fractionAttributeA = sumAttributeA.toDouble/data.size
//fractionAttributeA: Double = 0.75
var fractionAttributeB = sumAttributeB.toDouble/data.size
//fractionAttributeB: Double = 0.25
【问题讨论】:
标签: scala apache-spark