You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark SQL关联两个数据集视图结果行数不符求助

问题根源与解决办法

为什么结果条数远超预期?

你写的SQL是隐式内连接,逻辑是把ds1_view里每个userid的所有行,和ds2_view里同userid的所有行做笛卡尔积匹配。出现3500多万条的核心原因,大概率是你误以为ds2_view的userid唯一,但实际存在重复值——比如ds2_view里某个userid有100条记录,ds1_view里这个userid有10条,连接后就会生成10×100=1000条记录,总条数自然会爆炸。

如果ds2_view的userid确实唯一,那结果条数应该等于ds1_view中能匹配到ds2_view的行数(最多371815条),显然和你给出的结果不符,所以可以确定ds2_view的userid存在重复。

怎么得到预期的371815条结果?

你要的是保留ds1_view所有行,同时合并ds2_view对应userid的字段,应该用左连接,同时先确保ds2_view的userid唯一:

  1. 先检查ds2_view的userid是否真的唯一:
SELECT userid, COUNT(*) as row_count
FROM ds2_view
GROUP BY userid
HAVING row_count > 1;

如果有返回结果,说明存在重复,先去重生成新视图:

CREATE OR REPLACE VIEW ds2_view_unique AS
SELECT DISTINCT userid, <替换成ds2_view的其他字段>
FROM ds2_view;
  1. 用左连接获取预期结果:
SELECT *
FROM ds1_view v1
LEFT JOIN ds2_view_unique v2
ON v1.userid = v2.userid;

左连接会保留ds1_view的全部371815条记录,ds1中找不到对应userid的行,ds2的字段会填充为NULL,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Chandeshwar Prasad sit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 01:20:20