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


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',