[英]How do I use a compressed columnar store in Spark SQL?
目的:
我想在稀疏的数据集上使用Spark。 我知道SparkSQL现在支持列式数据存储(我相信通过SchemaRDD)。 有人告诉我,实现了列存储的压缩,但是当前默认情况下处于关闭状态。
我可以确保Spark将我的数据集以压缩形式存储在内存中的柱状存储中吗?
我尝试过的
在Spark峰会上,有人告诉我,我必须按以下步骤打开压缩功能:
conf.set("spark.sql.inMemoryStorage.compressed", "true")
但是,这样做似乎对我的内存占用没有任何影响。
以下是我的测试代码片段:
case class Record(i: Int, j: Int)
...
val conf = new SparkConf().setAppName("Simple Application")
conf.set("spark.sql.inMemoryStorage.compressed", "true")
val sc = new SparkContext(conf)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext._
val records = // create an RDD of 1M Records
val table = createSchemaRDD(records)
table.cache
在一种情况下,我创建记录以使i和j的所有值都是唯一的。 在这种情况下,我看到使用了89.4MB。
在第二种情况下,我创建记录,以使i和j的大多数值均为0。(大约99.9%的条目为0)。 在这种情况下,我看到使用了43.0MB。
我希望压缩率更高。 有什么我应该做的不同的事情吗?
谢谢您的帮助。
您要在Spark 1.0.2中使用的设置是:
spark.sql.inMemoryColumnarStorage.compressed
只需将其设置为“ true”即可。 我在conf/spark-defaults.conf
完成了它。
刚刚验证,这样可以减少内存占用。
sqlContext.cacheTable
是必需的。 .cache
将不使用内存中的列存储来缓存表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.