这部分内容可用于性能调优,通过将数据缓存到内存来提高性能。
Spark SQL可以通过调用sqlContext.cacheTable("tableName")方法来缓存使用柱状格式的表。然后,Spark将会仅仅浏览需要的列并且自动地压缩数据以减少内存的使用以及垃圾回收的压力。可以通过调用sqlContext.uncacheTable("tableName")方法在内存中删除表。
注意:如果调用schemaRDD.cache()而不是sqlContext.cacheTable(...),表将不会用柱状格式来缓存(即列式存储)。在这种情况下,强烈推荐调用sqlContext.cacheTable(...)。
可以在SQLContext上使用setConf方法或者在用SQL时运行“SET key=value”命令来配置内存缓存,属性部分配置信息如表3.1所示。
表3.1 用“SETkey=value”命令的部分属性配置
对表进行缓存的示例:
1.用sql方法从people中查找数据
这里的people是在前面构建的DataFrame中注册的表。
2.对表进行缓存
(www.xing528.com)
cacheTable操作是惰性的,在调用sqlContext.cacheTable("people")后,并不会马上进行缓存,执行完此操作后对应的Web Interface界面(http∶//driver∶4040)如图3.6所示。
图3.6 Driver界面中缓存表前的Storage界面
通过results的show方法,触发缓存操作,这时仅仅将results对应的“name”列缓存内存中。对应的Web Interface界面(http∶//driver∶4040)如图3.7所示。
当前的两个分区都已经全部缓存到列内存中。
缓存成功后,继续调用show方法,显示results。对于结果中时间上的变化,这里是由于数据量比较小,缓存后的时间消耗只减少了一点。代码如下。
图3.7 Driver界面中缓存表触发后的Storage界面
调用uncacheTable方法释放缓存:
调用后,可以查看Web Interface界面,内存会马上释放。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。