apache-spark - 如何使用 Spark SQL 作为内存数据库?
问题描述
我正在尝试理解 Spark SQL 的概念,并且想知道是否可以将 Spark SQL 用作内存数据库,类似于 H2/SQLite?
一旦我处理了 100 个文件中的所有记录,我就可以将数据保存为表格格式,并且可以查询表以获取结果,而不是搜索文件。这有道理吗?
Dataset<Row> results = spark.sql("SELECT distinct(name) FROM mylogs");
在运行时,如果用户选择从表“mylogs”中获取不同的名称,它应该从表中获取(而不是从派生表的基础文件中获取)。
我注意到的是 Spark SQL 确实扫描文件以再次获取数据,直到它扫描所有 100 个文件并获取数据,用户必须等待响应。
这是 Spark 的用例吗?有没有更好的方法来实现这一目标?
解决方案
理论上这是可行的,您可以将 Spark SQL 用作内存数据库。如果数据在某个时候消失并且您必须再次重新查询 100 个文件,我不会感到惊讶。
您可以进行配置,在其中对 100 个文件执行查询,然后cache
/persist
结果来避免扫描。
这就是 Spark Thrift Server 的工作原理,因此您应该阅读Running the Thrift JDBC/ODBC server中的文档。
推荐阅读
- spring - Spring Security 身份验证和用户界面
- javascript - Firebase onAuthStateChange() 状态不会改变
- r - 使用 dply 为每个组创建百分比
- macos - Ecamm Live 等虚拟相机未出现在经过公证的 mac 电子应用程序中
- javascript - 如何根据客户的输入动态查找用户?[解决了]
- c++ - C++:使用元组的 TypeDef
- ios - Flutter Firestore 删除的文档变灰并意外复活
- c - C()中的if语句
- docker - 测试成功后如何让Circle CI在AWS ECS上上传和部署镜像?
- vuepress - 使用 NodeJs 和 Gulp 在另一个网站上列出 VuePress 文章