【问题标题】:Select single random sample from group by in Hive从 Hive 中的 group by 中选择单个随机样本
【发布时间】:2019-08-23 02:21:31
【问题描述】:

我有一张看起来像这样的表格:

Name      Age       Num_Hobbies     Num Shoes
Jane      31        10              2
Bob       23        3               4
Jane      60        2               200
Jane      31        100             6
Bob       10        8               7
etc etc

我想按姓名和年龄对该表进行分组,然后从其余列中随机选择一行。

在 pandas 中,我会执行以下操作:

df.groupby(['Name', 'Age']).apply(lambda x: x.sample(n=1))

在 hive 中,我知道如何创建组,但不知道如何从组中选择单个随机样本。

我在堆栈溢出上看到了这个问题:How to sample for each group in hive?

但是,我不明白如何应用动态分区或 Hive 分桶从组中选择单个样本。

【问题讨论】:

  • 分组后选择第一行不排序分组?

标签: random hive group-by


【解决方案1】:

您可以将rank()row_number()rand() 一起使用

select * from 
(
       select name,age,rank() (partition by name,age order by rand()) as rank
       from table         
) t 
where rank = 1

【讨论】:

  • 当我尝试这个时,我的所有条目的排名都是“1”
  • 另外,这不会选择一个真正随机的样本——只选择每个样本的第一行(如果它们已经被订购,这是否会破坏顺序以随机调用样本?)
  • 按 rand() 排序应该随机化行
  • 不是“rank()(按名称分区,按 rand() 的年龄排序)作为排名”而是“rank() 超过(按名称分区,按 rand() 的年龄排序)作为排名”
猜你喜欢
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 2017-07-07
相关资源
最近更新 更多