LoginSignup
0
1

More than 5 years have passed since last update.

spark sqlのdf.saveAsTableはdefaultでgz + parquetでdataは保存される。

Last updated at Posted at 2016-07-26

hiveで普通にtsvをloadする

  • tsvデータをhdfsにおく
  • hiveからload data でinsertする。
  • hiveのtableは最も効率(処理、空間)が悪いっぽい textformat
  • and sequencefile
7.84 MB 2016/7/26 10:58:24  3   128 MB  sample.tsv
9.07 MB 2016/7/26 12:22:09  2   128 MB  000000_0

した場合

  • textformatの場合、tsvがそのまま, hiveのtable dataになる。
  • 非圧縮でのsequence fileの場合、当然、元データサイズと同じくらいになる、

spark sql data frameのsaveAsTableでtable作成、insertをした場合

  • tsvをtextFileで読み込み、caseクラスでRow型に変換して、toDFでdataframeに変換して、saveAsTableでhive tableとして保存する。

  • オプション設定はなし、default

175.17 KB   2016/7/26 11:27:47  2   128 MB  part-r-00000-3261acea-9b2b-495a-8db5-8f81cef47ca1.gz.parquet
171.1 KB    2016/7/26 11:27:47  2   128 MB  part-r-00001-3261acea-9b2b-495a-8db5-8f81cef47ca1.gz.parquet

の場合

  • gz.parquet suffixのfileが2つ生成
  • サイズ、suffixからgz圧縮+parquet format

show create tableの表示からも確認

ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
WITH SERDEPROPERTIES ( 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
TBLPROPERTIES (
  'COLUMN_STATS_ACCURATE'='false', 
  'EXTERNAL'='FALSE', 
  'numFiles'='2', 
  'numRows'='-1', 
  'rawDataSize'='-1', 
  'spark.sql.sources.provider'='org.apache.spark.sql.parquet', 
  'spark.sql.sources.schema.numParts'='1', 

snappy codec オプションを指定した場合

  • sqlContext.setConfで

sqlContext.setConf("spark.sql.parquet.compression.codec", "snappy")
sqlContext.setConf("parquet.compression", "SNAPPY")

でsaveAsTableで保存した場合

235.3 KB    2016/7/26 11:19:10  2   128 MB  part-r-00000-5d10d91c-d05d-4be6-9c40-d6c7db9c56cc.snappy.parquet
228.73 KB   2016/7/26 11:19:07  2   128 MB  part-r-00001-5d10d91c-d05d-4be6-9c40-d6c7db9c56cc.snappy.parquet
  • snappy + parquetで保存される。
  • ↓のshow create table の結果でもわかる。
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
WITH SERDEPROPERTIES ( 
  'spark.hadoop.mapred.output.compress'='true', 
  'spark.hadoop.mapred.output.compression.codec'='org.apache.hadoop.io.compress.SnappyCodec', 
  'spark.hadoop.mapred.output.compression.type'='BLOCK') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
TBLPROPERTIES (
  'COLUMN_STATS_ACCURATE'='false', 
  'EXTERNAL'='FALSE', 
  'numFiles'='2', 
  'numRows'='-1', 
  'rawDataSize'='-1', 
  'spark.sql.sources.provider'='org.apache.spark.sql.parquet', 
  'spark.sql.sources.schema.numParts'='1', 
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1