当前位置: 首页 > 知识库问答 >
问题:

缓存查询性能Spark

汪迪
2023-03-14

如果我试图缓存一个巨大的DataFrame(例如:100GB表),当我对缓存的DataFrame执行查询时,它会执行全表扫描吗?火花将如何索引数据。火花留档说:

Spark SQL可以通过调用Spark,使用内存中的列格式缓存表。目录cacheTable(“tableName”)或dataFrame。缓存()。然后Spark SQL将只扫描所需的列,并将自动调整压缩以最小化内存使用和GC压力。你可以打电话给spark。目录uncacheTable(“tableName”)从内存中删除该表。

http://spark.apache.org/docs/latest/sql-programming-guide.html#caching-内存中的数据

我并没有完全理解上面的语句,如果有人详细解释下面的语句或者它如何优化大型缓存数据帧上的查询,那将非常有帮助

“然后Spark SQL将只扫描所需的列,并自动

“调谐压缩”

共有1个答案

朱伯寅
2023-03-14

当我对缓存的DataFrame执行查询时,它会执行全表扫描吗?火花将如何索引数据。

虽然可以进行一些较小的优化,但Spark根本不为数据编制索引。所以在一般情况下,你应该假设Spark将执行完整的数据扫描。

然而,它可以应用早期预测。因此,如果查询只使用列的子集,Spark只能访问这些列,这是必需的。

柱状存储很适合压缩,Spark支持多种压缩方案(runlengtencodingDictEncodingBooleanBitSetIntDeltaLongDelta)。根据列的类型和计算的统计数据,Spark可以自动选择适当的压缩格式或跳过任何压缩。

通常,与列存储一起使用的压缩方案允许对压缩数据进行查询,有些(如RLE)可用于高效选择。同时,您可以增加存储在内存中的数据量,无需从磁盘获取数据即可访问这些数据。

 类似资料:
  • 我已经在solrcloud 4.3.0中为我的索引配置了solr缓存。我还将自动提交策略配置为1h hard commit和opensearcher false。虽然我没有重新打开searcher,但似乎每1小时我的缓存就会被刷新并重置。据我所知,只有关闭和打开新的搜索程序才能导致缓存被刷新。但我不明白为什么会这样?

  • 关于如何打开缓存有什么建议吗?

  • 问题内容: 我正在使用JPA在基于Java EE的Web应用程序中加载和保留实体。Hibernate用作JPA的实现,但是我不使用特定于Hibernate的功能,而只能使用纯JPA。 这是一些DAO类的notice 方法: 方法很简单,但是有很大的缺点。每次调用该方法时,都会在JPA实现中的某处执行以下操作: JPQL表达式被解析并编译为SQL。 Statement或PreparedStateme

  • 问题内容: 一级缓存与hibernate中的查询缓存是否不同?我看过有关第一级和查询缓存的文章,所以我很困惑。 问题答案: 默认情况下,第一级缓存处于启用状态,并且基于每个会话。默认情况下,查询缓存未启用,它在多个会话之间共享,应始终与二级缓存一起使用。 要启用查询缓存,应使用以下属性:

  • 我必须使用StackExhange.redis C#在redis缓存中频繁添加N个(独立的)项,每个项都有不同的过期时间,以便在客户端有最小的时间,在服务器端有最小的阻塞和成本。Redis服务器每秒将收到数百个get请求,所以我不想打乱get时间。 我已经阅读了这里的文档并在这里回答。我找不到一个执行此操作的方法。考虑到不同的选择: null

  • ES 内针对不同阶段,设计有不同的缓存。以此提升数据检索时的响应性能。主要包括节点层面的 filter cache 和分片层面的 request cache。下面分别讲述。 filter cache ES 的 query DSL 在 2.0 版本之前分为 query 和 filter 两种,很多检索语法,是同时存在 query 和 filter 里的。比如最常用的 term、prefix、rang