当前位置: 首页 > 知识库问答 >
问题:

按操作触发数据帧组,并从每个组中选取N个值

田向荣
2023-03-14

我有一个spark数据框,其结构如下:

Operation|RequestURL|RequestBody|IsGetRequest|IsPostRequest

和一个变量:val n=100

我想在数据帧中的操作列上执行分组。然后,我想获取每个这些组(创建一个新的data-frame/rdd/map)中的n请求的刚体列。如果一个组有少于n个请求,我希望复制该组中的一些行,以确保我从每个组获取的请求数量相同。

我愿意使用任何语言(python/scala),也可以将数据帧转换为熊猫或键和值的哈希映射,如果这不可能使用火花数据帧来完成。

我已经看到了一些使用分组和order-by的堆栈溢出解决方案,然后使用windows分区函数来获取topN值。我的问题是如何不同的——对于我的情况,没有排序。此外,我想确保从每个组获取相等数量的请求。

共有1个答案

秦光启
2023-03-14

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

 类似资料:
  • 我有一个熊猫数据框,如下所示。 我根据按数据帧分组。分组数据框在概念上如下所示。 现在,我正在寻找一个内置API,它将给我最大作业数的。对于上面的示例,-2具有最大计数。 更新:我希望具有最大作业计数,而不是具有最大作业计数的。对于上述示例,如果,则输出为。这能做到吗?

  • 问题内容: 我试图从看起来像这样的数据库表结果中选择前2条记录 我试过这个查询 但是有些主题,例如失踪的地方,我什至尝试了以下链接的建议 如何选择每个组的前N行? 但是我为每个受检者得到两个以上 我究竟做错了什么? 问题答案: 您可以使用相关的子查询: 该查询通过串联三列来构造单列主键。如果您有真正的主键(如),则可以用代替。 SQL Fiddle中的示例。

  • 问题内容: 我有一个简单的表,像这样: 我想获得每个用户出现的前2个“字母”, 甚至更好:崩溃成列 我怎样才能在postgres中做到这一点? 问题答案: = > SQL小提琴演示

  • 问题内容: 我们是postgres的新手,我们有以下查询,通过该查询我们可以从每个类别中选择前N个记录。 以上查询的输出是这样的 但是我们的要求有所不同,我们想从每个类别中选择前n%个记录,其中n不固定,n基于每个组中某些元素的百分比。 问题答案: 要基于每个组中行数的百分比来检索行,可以使用两个窗口函数:一个对行进行计数,另一个对行赋予唯一编号。 SQLFiddle示例:http ://sqlf

  • 我有一个包含三列字符串的数据框。我知道第三列中只有一个值对前两列的每个组合都有效。要清理数据,我必须按数据帧按前两列进行分组,并为每个组合选择第三列的最常用值。 我的代码: 最后一行代码不起作用,它说“关键错误‘简称’”,如果我试图只按城市分组,那么我得到了一个断言错误。我能做什么来修复它?

  • 目前,我创建了单独的,最后连接这些,以创建一个。 是否有优雅的或一个衬里来从数组列表和多个数组中创建df。