У меня есть одна таблица Hive, которая используется в нескольких последующих запросах spark.sql.
Каждый этап показывает HiveTableScan, который не является необходимым, так как таблицу нужно читать только один раз.
Как этого избежать?
Вот упрощенный пример, которыйповторяет проблему
Создайте пример таблицы: -
spark.sql("CREATE DATABASE IF NOT EXISTS default")
spark.sql("DROP TABLE IF EXISTS default.data")
spark.sql("CREATE TABLE IF NOT EXISTS default.data(value INT)")
spark.sql("INSERT OVERWRITE TABLE default.data VALUES(1)")
Выполните несколько запросов, основанных на предыдущем кадре данных: -
query1 = spark.sql("select value from default.data")
query1.createOrReplaceTempView("query1")
query2 = spark.sql("select max(value)+1 as value from query1").union(query1)
query2.createOrReplaceTempView("query2")
query3 = spark.sql("select max(value)+1 as value from query2").union(query2)
query3.createOrReplaceTempView("query3")
spark.sql("select value from query3").show()
Ожидаемый результат: -
|value|
+-----+
| 3|
| 2|
| 1|
+-----+