Spark Dataframe按操作分组并从每个组中选择N个值

时间:2019-07-04 21:13:37

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

我具有以下结构的spark数据框:

Operation|RequestURL|RequestBody|IsGetRequest|IsPostRequest

和一个变量:val n = 100

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

需要帮助以最佳方式弄清楚如何做到这一点。我愿意使用任何一种语言(python/scala),如果无法使用spark data-frame,也可以将数据框转换为熊猫或键和值的哈希图。

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

1 个答案:

答案 0 :(得分:0)

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