hadoop - 如何在 hive 中获取 100K 用户的随机样本及其所有交易?

标签 hadoop hive

我有一个庞大的数据集,其中包含数百万用户的信息以及他们 1 年的购买记录。有没有办法从这些数据中创建 100K 用户的随机样本(保留他们所有的个人购买)?由于一个用户可以进行多次购买,因此样本将包含超过 10 万条记录。 我能够找到 rand() 函数,但它没有为我提供用户的所有记录。

我试过这个查询:

select *
from mytable
where rand()< 0.025 and mydate between '20140101' and '20141231'
distribute by rand()
sort by rand()
limit 100000

此结果仅生成 10 万个随机记录,而不是这 10 万个用户的所有记录。

关于如何编写配置单元查询以获得此结果有什么建议吗?

最佳答案

您应该首先创建包含 100,000 个随机用户 ID 的表:

CREATE table Random_Users AS 
  Select * From (Select distinct userId From my table) users 
  where rand()< 0.025 limit 100000;

然后你可以做

Select mytable.* From mytable m JOIN random_users r ON (m.userId = r.userId);

关于hadoop - 如何在 hive 中获取 100K 用户的随机样本及其所有交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31989670/

相关文章:

scala - 如何通过Scala Spark-Shell将大RDD写入本地磁盘?

hadoop - hadoop中的hcatalog有什么用?

hadoop - 如何在 VM 上永久存储 hbase 表

hadoop - 插入 Parquet 文件生成 512 MB 文件。如何生成 1 GB 的文件?

apache - 在 Hive 中创建表时出现问题

hadoop - 从 Spark 输出数十亿行

regex - Hive with Regex SerDe 拆分行,每个单词成为一列

hadoop - 插入Hive Orc分区表时出现运行时异常

hadoop - Hive分区表查询优化

mongodb - 如何执行Mongo-Hadoop Connector的传感器日志示例?