首页 > 解决方案 > 如何使用 Spark SQL 作为内存数据库?

问题描述

我正在尝试理解 Spark SQL 的概念,并且想知道是否可以将 Spark SQL 用作内存数据库,类似于 H2/SQLite?

一旦我处理了 100 个文件中的所有记录,我就可以将数据保存为表格格式,并且可以查询表以获取结果,而不是搜索文件。这有道理吗?

Dataset<Row> results = spark.sql("SELECT distinct(name) FROM mylogs");

在运行时,如果用户选择从表“mylogs”中获取不同的名称,它应该从表中获取(而不是从派生表的基础文件中获取)。

我注意到的是 Spark SQL 确实扫描文件以再次获取数据,直到它扫描所有 100 个文件并获取数据,用户必须等待响应。

这是 Spark 的用例吗?有没有更好的方法来实现这一目标?

标签: apache-sparkapache-spark-sql

解决方案


理论上这是可行的,您可以将 Spark SQL 用作内存数据库。如果数据在某个时候消失并且您必须再次重新查询 100 个文件,我不会感到惊讶。

您可以进行配置,在其中对 100 个文件执行查询,然后cache/persist结果来避免扫描。

这就是 Spark Thrift Server 的工作原理,因此您应该阅读Running the Thrift JDBC/ODBC server中的文档。


推荐阅读