【问题标题】:Is there a way to limit the data being read when joining tables in spark sql?有没有办法限制在 spark sql 中加入表时读取的数据?
【发布时间】: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


【解决方案1】:

类似这样的:

employee = spark.sql('select id, name, deptno from employee limit 500')
department = spark.sql('select deptno, deptname from department limit 500')
employee = employee.join(department, on = 'deptno', how = 'inner')

【讨论】:

  • 最后我只做了这个。我想没有其他方法可以做到这一点,除非先从 sql 中提取所有表,然后将它们加入有限的数据中。
猜你喜欢
  • 2022-06-16
  • 1970-01-01
  • 2010-09-24
  • 2020-03-15
  • 2021-08-09
  • 2011-12-11
  • 2017-08-17
  • 2019-04-04
  • 1970-01-01
相关资源
最近更新 更多