我具有以下结构的spark数据框:
Operation|RequestURL|RequestBody|IsGetRequest|IsPostRequest
和一个变量:val n = 100
我想在数据框中的Group-by
列上执行Operation
。然后,我想为每个组中的RequestURL
个请求(无顺序)获取RequestBody
和n
列(为此创建一个新的data-frame/rdd/map
)。如果一个组的请求数少于n,则我想复制该组中的某些行,以确保我从每个组获取的请求数是相同的。
需要帮助以最佳方式弄清楚如何做到这一点。我愿意使用任何一种语言(python/scala
),如果无法使用spark data-frame
,也可以将数据框转换为熊猫或键和值的哈希图。
我已经看到了一些使用堆栈和排序的堆栈溢出解决方案,然后使用Windows分区函数来获取topN
值。
我的问题有何不同-就我而言,没有ordering
。另外,我想确保每个小组中的fetching equal number of requests
。
答案 0 :(得分:0)
使用Windows分区功能解决了它。随后,使用groupBy()和toMap函数将结果数据集转换为[String,List(Strings)]的地图,遍历地图并使用列表操作复制行。