【发布时间】:2019-01-25 22:28:58
【问题描述】:
我有一个看起来像这样的表(第 1 列是 URL,第 2 列是操作 ID,第 3 列是用户 ID):
1 2 3
===========
d x a
d q a
e y a
f z a
f z b
d i b
e x b
d i c
g q c
o q c
f q c
我正在尝试检查是否有 col1 = 'f' 的行。
如果 col1 = 'f',我需要从 col3 获取 userID,然后检查 col3 = userID 的所有行,看看是否有 col2 = 'x' 的行。
如果有任何 userID 具有 col1 = 'f' 的行和 col2 = 'x' 的行,则返回在 col3 中具有 userID 的所有行
我是一个 hive/sql 菜鸟,但这里有一些我认为可以完成我想要做的事情的 python 代码......
df = pd.DataFrame(table)
df2 = df[df['1'].str.contains('f')]
df2['check'] = df2['2'].str.contains('x')
ids = df2[df2['check']]
df = df[df['3'].isin(ids)]
我想要查询的结果会返回
1 2 3
===========
d x a
d q a
e y a
f z a
f z b
d i b
e x b
到目前为止,我得到的最接近的是:
SELECT * FROM log AS a
WHERE a.3 in
(
SELECT DISTINCT 3
FROM log
WHERE ((to_date(log_date)) >= (date_sub(current_date, 1)))
AND 1 = 'f'
)
这让我走到了一半,但它没有在 col2 上进行过滤,并且需要非常长时间才能运行,这可能会导致它在我的环境中失败。
有没有办法只使用 Hive / Spark 来完成这个?我真的不想下载这个文件并在上面运行 python 脚本,因为它有几个 GB,而且我的办公室 wifi 很慢 :(
【问题讨论】: