2017-06-23 14 views
0

HDFSでは、寄木張りの形式で同じデータが2セットあります。
1セットはcol1にソートされ、別のセットはソートされません。 sorted_tableは約127GBで、unsorted_tableは約117GBです。 サイズはここでは問題ありません。Sparkを使用した寄木細工ファイルのカウント操作

私はスパークSQLを使用して2つのクエリ以下走った:私はスパークUI上でこれらのクエリを解析し

select col1, count(*) from sorted_table where col1 = someInt group by col1 

select col1, count(*) from unsorted_table where col1 = someInt group by col1 

、私はsorted_table上のクエリがunsorted_table上のデータとクエリの唯一の127メガバイトを読み込むことがわかった35 GBのデータを読み込み、カウントを計算します。

だから私の質問は以下のとおりです。

  1. 少ないデータを読み出すことにより、カウント数字を出しスパークんどのように?
  2. なぜsorted_tableのジョブは、 unsorted_tableのジョブと比較してデータの読み込みが少ないのですか?

答えて

2

寄木細工ファイルは、行グループと呼ばれる塊に格納されます。各行グループには、行数、最小値、最大値など、フィールド/列ごとに関連するメタデータを含めることができます。あなたのデータはソートされているので、Sparkはこれらの範囲に基づいてデータに対して大きなチャンクをスキップすることができます。 parquet_readerを使用して

は、ここで私の寄せ木ファイルからの抜粋です:

Column 2 
, values: 35957, null values: 0, distinct values: 0 
    max: 17305, min: 17305 
    compression: SNAPPY, encodings: RLE PLAIN 
    uncompressed size: 143866, compressed size: 6800 

それはDATE分野だし、すべての値が同じ、それ故に同じ最大値と最小値です。しかし、特定の日付範囲を探している場合、Sparkはこれを使用して実際のデータが調べる価値があるかどうかを判断できます。

ここでは行グループについての詳細情報があります:https://parquet.apache.org/documentation/latest/ しかし、私はそれは、特定の実装かもしれ... minmaxが表示されていないが。

関連する問題