У меня есть внешняя таблица ульев на паркете, и данные часто добавляются.У меня есть другое приложение, которое запрашивает таблицы кустов каждые 30 минут и выполняет некоторую проверку.В Spark1.6 я использовал HiveContext для запроса, и он работал хорошо.В Spark2 я заметил, что SQLContext заменил HiveContext, и если я запрашиваю с SQLContext, дополнительные изменения не доступны.Ниже приведен пример
-----------------------
EXTERNAL HIVE TABLE ON PARQUET
-----------------------
create external table table6(
id string,
db1field string,
created string,
empid string
)
stored as parquet
location '/table6';
SPARK2-SHELL RUN НИЖЕ
import spark.implicits._
import org.apache.spark.rdd._
import org.apache.spark.sql._
import org.apache.spark.sql.types._
val rowsRdd: RDD[Row] = sc.parallelize(
Seq(
Row("firstrow", "1", "2018-10-12","12232"),
Row("secondrow", "2", "2018-10-12","23244"),
Row("thirdrow", "3", "2018-10-12","54434")
)
)
val schema = new StructType()
.add(StructField("id",StringType,true))
.add(StructField("db1field", StringType, true))
.add(StructField("created", StringType, true))
.add(StructField("empid", StringType, true))
val df = spark.createDataFrame(rowsRdd, schema)
df.write.mode("overwrite").parquet("/table6")
spark.sql("REFRESH TABLE table6")
spark.sql("select * from table6").show(false)
СЕЙЧАС ЗАПРОС ОТ ДРУГОГО SPARK2-SHELL RUN НИЖЕ
import org.apache.spark.sql.SparkSession
val sparksession=SparkSession.builder().enableHiveSupport().getOrCreate()
val df=sparksession.sql("select * from table6")
df.show(false)
val df2=sparksession.sqlContext.sql("select * from table6 ")
df2.show(false)
Запрос во второй spark2-оболочке не может получить изменения, сделанные в первом сеансе spark2-shell без явного вызова REFRESH TABLE.Проблема в том, что у меня более 40 таблиц, и вызов на обновление для каждой из них является непроизводительным.Есть ли более чистое решение?