【问题标题】:Spark Dataframe Group By Operation and Picking N values from each groupSpark Dataframe Group By Operation 并从每组中选取 N 个值
【发布时间】:2019-11-15 13:38:54
【问题描述】:

我有以下结构的火花数据框:

Operation|RequestURL|RequestBody|IsGetRequest|IsPostRequest

还有一个变量:val n = 100

我想对数据框中的Operation 列执行Group-by。然后,我想为每个组中的n 请求(无排序)获取RequestURLRequestBody 列(创建一个新的data-frame/rdd/map)。如果一个组的请求少于 n 个,我想复制该组中的一些行,以确保我从每个组中获取的请求数相同。

在弄清楚如何以优化的方式完成此操作时需要帮助。我愿意使用任何语言 (python/scala) 并将数据框转换为 pandas 或键和值的哈希映射,如果使用 spark data-frame 无法做到这一点。

我已经看到一些使用分组和排序的堆栈溢出解决方案,然后使用 Windows 分区函数来获取 topN 值。 我的问题有何不同 - 就我而言,没有ordering。另外,我想确保每个组的fetching equal number of requests

【问题讨论】:

    标签: python scala apache-spark apache-spark-sql


    【解决方案1】:

    使用 Windows 分区功能解决了这个问题。随后使用 groupBy() 和 toMap 函数将结果数据集转换为 [String,List(Strings)] 的映射,遍历映射并使用列表操作复制行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 2017-07-02
      • 2011-01-08
      相关资源
      最近更新 更多