【问题标题】:my spark sql limit is very slow我的 spark sql 限制很慢
【发布时间】:2018-05-13 21:22:56
【问题描述】:

我使用 spark 读取 elasticsearch.Like

select col from index limit 10;

问题是索引非常大,它包含1000亿行。并且spark生成数千个任务来完成这项工作。
我只需要 10 行,即使 1 个任务返回 10 行也可以完成工作。我不需要这么多任务。
即使是限制1,限制也很慢。
代码:

sql = select col from index limit 10
sqlExecListener.sparkSession.sql(sql).createOrReplaceTempView(tempTable)

【问题讨论】:

  • 您是否尝试过明确设置分区大小?
  • @JustinPihony 是的,我设置了 es_input_max_docs_per_partition=5000,看来 total_rows_es_contains = es_input_max_docs_per_partition * num_of_partitions
  • 如果你使用 push.down=True 确保 double.filtering=False 因为它可能会阻止限制被推低。通过调用 df.explain(True) 检查你的物理计划,并确保弹性搜索和限制之间没有过滤

标签: apache-spark elasticsearch apache-spark-sql spark-submit


【解决方案1】:

source code of limit 表示它将为每个分区获取第一个 limit 元素,然后它将扫描所有分区。

为了加快查询速度,您可以指定一个分区键值。假设你使用day作为分区键,下面的查询会快很多

select col from index where day = '2018-07-10' limit 10;

【讨论】:

  • 表没有分区怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多