Edited at

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

More than 3 years have passed since last update.


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