【问题标题】:get a Spark Dataframe histogram after groupBy countgroupBy 计数后得到 Spark Dataframe 直方图
【发布时间】: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


【解决方案1】:

我没有使用 rdd.histogram 来解决我的问题。由于我的直方图的值介于 0 和 1 之间,并且 bin 以 10 的顺序均匀分布,我可以简单地通过 (floor($"result" * histoBins) / histoBins) 截断 result 列并从原始数据框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2013-06-13
    • 2018-01-31
    • 1970-01-01
    • 2019-01-21
    • 2019-08-11
    相关资源
    最近更新 更多