如果我在pyspark中注册一个Hive表,然后针对该表写入sql,则sql是每次都命中底层Hive数据库,还是针对Spark群集中加载的数据运行? 我正在一个 jupyter 笔记本中运行它
hive_context = HiveContext(sc) #Initialize Hive
tbl_df = hive_context.table("hive_schema.hive_tbl_name")
tbl_df.registerTempTable("hive_tbl_name");
#Do the below queries run against Hive or against Spark
hive_context.sql("select count(*) from hive_tbl_name".).show();
hive_context.sql("select max(col1) from hive_tbl_name".).show();
SQL
是每次都命中底层 Hive 数据库,还是针对 Spark 群集中加载的数据运行?
也不。
- 如果未缓存数据,则每次执行查询时都会命中磁盘。没有"在 Spark 群集中加载"状态。
- 查询永远不会每次都命中"底层 Hive 数据库",因为 Hive 不是数据库。Spark 从 Hive 元存储读取表信息。无论上下文如何,都不涉及 HiveServer 执行。
最后,PySpark在这里完全无关紧要。执行引擎是相同的,独立于语言绑定。