【发布时间】:2015-04-25 15:49:10
【问题描述】:
我正在使用一些简单的概率公式创建推荐器。我正在使用 Hive 在我的 Hadoop 集群中处理 Million Song Dataset 大型数据集(189M 行和 3 列)。这是初始数据集的示例:
Million_song - 初始数据集 user song play_count
c3fb2 SOXOQ 18
c3fb2 SOZVC 1
6041e SOBHN 3
6041e SOBXT 5
但首先我从初始数据集创建了一个表,此处显示了一个示例:
million_both - 将同一用户收听的两首歌曲的出现次数相加 driver_song_id also_song_id play_count
SOXOQ SOBXT 1642
SOBHN SOBXT 2168
SOBXT SOZVC 1742
获取所有不同的用户(我希望此值显示在最终输出第五列的所有行中)
select count(distinct users) from million_song;
# 139,738,054
我正在尝试将上面的这两个表添加在一起,问题是我无法获得正确的 count_n_users,对于表中的每一行,这应该是相同的 #。这是我的代码:
select a.driver_song_id, a.also_song_id, a.play_count,
count(distinct b.user), sum(distinct b.user) as count_n_users
from (select driver_song_id, also_song_id, play_count from million_both) as a
join (select user, song, play_count from expp_team.million_song) as b
on a.driver_song_id = b.song
group by a.driver_song_id, a.also_song_id, a.play_count;
我无法获得正确的 count_n_users 的问题,截至目前,它夸大了价值。
这是我希望输出的样子:
driver_song_id also_song_id play_count c(b.user) count_n_users
SOXOQ SOBXT 1643 463 139,738,054
SOBHN SOBXT 2168 483 139,738,054
SOBXT SOZVC 1742 725 139,738,054
【问题讨论】:
-
您能否编辑带有实际说明您期望输出的原因的示例数据?我不知道“将这两个表加在一起”是什么意思。例如,在您的第一行预期输出中,
play_count1,643 是多少? -
count_n_users 应该返回什么?它与倒数第二列有何不同?
-
@Codo count_n_users 假设代表million_song(初始数据集)中的计数(不同用户)
-
@BrianDeMilia 我列出的最后一个输出是我所期望的。上面的 SQL 正确输出了前四列,但我无法得到第五列。
-
然后你必须解释你如何从你提供的数据中得到你期望的结果。从您发布的内容中显然不清楚。 1642 + 18 不等于 1643。1642 + 5 不等于 1643。两者之和不等于 1643。显然,这个 1.397 亿的数字不能从您发布的任何内容中得出。