Spark 保留临时视图

dar*_*nok 7 sql scala persist apache-spark

我正在尝试保留临时视图,以便通过 sql 再次查询它:

val df = spark.sqlContext.read.option("header", true).csv("xxx.csv")
df.createOrReplaceTempView("xxx")
Run Code Online (Sandbox Code Playgroud)

持久化/缓存:

df.cache()                          // or
spark.sqlContext.cacheTable("xxx")  // or
df.persist(MEMORY_AND_DISK)         // or
spark.sql("CACHE TABLE xxx")
Run Code Online (Sandbox Code Playgroud)

然后我移动底层xxx.csv,并且:

spark.sql("select * from xxx")
Run Code Online (Sandbox Code Playgroud)

在此之后,我发现只CACHE TABLE xxx存储了一个副本。我做错了什么,如何坚持,例如。DISK_ONLY可查询的视图/表?

Kar*_*dol 5

首先将其缓存为 ,df.cache然后注册为df.createOrReplaceTempView("dfTEMP"),因此现在每次您查询时dfTEMP都会val df1 = spark.sql("select * from dfTEMP)从内存中读取它(第一个操作df1实际上会缓存它),现在不用担心持久性,因为好像df不适合内存,我会将其余的内容写入磁盘。