【发布时间】:2017-09-01 05:23:08
【问题描述】:
我有一个很大的 Spark DataFrame,经过 groupBy-count 操作后,我的数据集总结如下:
myResultDF
+---+---+-----+----------+
|SEX|AGE|count| result|
+---+---+-----+----------+
| 1| 4| 1420| 0.2665724|
| 2| 8| 801|0.32442601|
| 1| 1| 2123| 0.2259348|
| 2| 3| 1329| 0.2732647|
| 2| 2| 1224|0.28158098|
| 1| 2| 1295|0.27588340|
| 2| 6| 1063| 0.2958312|
+---+---+-----+----------+
现在,我想生成一个介于 0 和 1 之间的结果直方图,同时考虑到 count 列。
到目前为止,在this link 之后,我可以在不考虑count 列的情况下创建我的结果的直方图:
val histogramX = (0 to 10 toArray).map({case (x: Int) => x.toDouble / 10})
val histogramY = myResultDF
.select("result")
.map(value => value.getDouble(0))
.rdd.histogram(histogramX, true)
这段代码只给了我一个直方图,在 0.2 和 0.3 之间出现了六次,在 0.3 和 0.4 之间出现了一次。
但我想要的是 (1420+2123+1329+1224+1295+1063) 次出现在 0.2 和 0.3 之间,801 次出现在 0.3 和 0.4 之间。
对此计算的任何建议将不胜感激:)
【问题讨论】:
-
为什么在应用计数聚合之前不应用直方图函数?这应该会给你你需要的结果。
-
感谢您的建议。忘记提及。结果取决于计数,我不想回到从 myResultDF 派生的大量数据帧。
-
另外,我必须匹配并将结果插入到原始数据帧的相应行中以进行直方图计数。那可能会更混乱:)
标签: apache-spark spark-dataframe