SPARK2 SQLContext запрос из куста не получает последние данные, если явно не обновлены - PullRequest
0 голосов
/ 23 января 2019

У меня есть внешняя таблица ульев на паркете, и данные часто добавляются.У меня есть другое приложение, которое запрашивает таблицы кустов каждые 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 таблиц, и вызов на обновление для каждой из них является непроизводительным.Есть ли более чистое решение?

...