【发布时间】:2020-09-17 08:40:22
【问题描述】:
我想通过连接两个非常大的表来读取 spark sql 中的数据。但我只需要来自结果数据帧的固定数字(比如说 500)。 比如——
SELECT id, name, employee.deptno, deptname
FROM employee INNER JOIN department ON employee.deptno = department.deptno
在这里我可以在结果数据帧上使用 head(500) 或 limit(500) 函数来限制结果数据帧中的行,但它仍然会先从两个表中读取完整数据,然后再在结果数据帧上它将应用限制。 有没有办法在应用限制之前避免读取完整数据?
【问题讨论】:
-
您可以先使用单独的子查询限制每个表的记录数,然后再加入。
-
@ShreyJakhmola 但我不一定事先知道输入表。这可能是一个非常复杂的 sql,它连接了我收到的许多表。现在要提取加入的表,我必须提取其中使用的所有表,然后再次在其上创建一个临时表,然后在其上运行查询,这将是复杂的。
-
限制从查询输出中获取前 n 行。您的评论回答了您的问题。由于您无法限制基础表中的数据,而且您无法知道您需要哪些数据,因此您无法实现您想要做的事情。
-
是的,没错。我现在只做了这样的事情。先提取单个表,然后先限制单个表上的数据,然后再将它们连接起来。
标签: apache-spark apache-spark-sql