我正在尝试理解Spark SQL概念,并想知道我是否可以将Spark SQL用作内存数据库,类似于H2 / SQLite?
一旦我处理了100个文件中的所有记录,我就可以以表格格式保存数据,我可以查询表格而不是搜索文件。这有什么意义吗?
Dataset<Row> results = spark.sql("SELECT distinct(name) FROM mylogs");
在运行时,如果用户选择从表'mylogs'获取不同的名称,它应该从表中获取(而不是从表派生自的基础文件中获取)。
我注意到Spark SQL会扫描文件以再次获取数据,直到它扫描所有100个文件并获取数据,用户必须等待响应。
这是Spark的用例吗?有没有更好的方法来实现这个目标?
答案 0 :(得分:-1)
理论上它是可行的,你可以使用Spark SQL作为内存数据库。如果数据在某个时刻消失,你不得不再次重新查询100个文件,我不会感到惊讶。
您可以配置一个配置,对100个文件执行查询,然后cache
/ persist
结果以避免扫描。
这就是Spark Thrift Server的工作原理,因此您应该阅读Running the Thrift JDBC/ODBC server处的文档。