繁体   English   中英

如何在Spark SQL中使用压缩的列式存储?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM