我们将事实表(30列)存储在S3上的拼花文件中,并在此文件上创建表并随后缓存它。表使用以下代码片段创建:
val factTraffic = spark.read.parquet(factTrafficData)
factTraffic.write.mode(SaveMode.Overwrite).saveAsTable("f_traffic")
%sql CACHE TABLE f_traffic我们在这个表(文件)上运行许多不同的计算,并且正在寻找缓存数据的最佳方法,以便在随后的计算中更快地访问数据。问题是,由于某种原因,从拼板读取数据并进行计算,然后从内存中访问数据会更快。一个重要的注意事项是,我们没有利用每一栏。通常,每次计算大约6-7列,每次都有不同的列.
有没有一种方法可以在内存中缓存这个表,这样我们就可以更快地访问它,而不是从地板上读取?
发布于 2018-03-19 20:44:49
缓存中的母化数据格式,您应该这样做:
val factTraffic = spark.read.parquet(factTrafficData)
factTraffic.write.mode(SaveMode.Overwrite).saveAsTable("f_traffic")
val df_factTraffic = spark.table("f_traffic").cache
df_factTraffic.rdd.count
// now df_factTraffic is materalized in memory另见https://stackoverflow.com/a/42719358/1138523
但是,这是否有意义是值得怀疑的,因为parquet是一种柱状文件格式(这意味着投影非常有效),而且如果每个查询都需要不同的列,缓存将不会对您有所帮助。
https://stackoverflow.com/questions/49365308
复制相似问题