2017-05-29 10 views
2

は、私は以下のコードシーケンス寄木細工と述語のプッシュダウンと辞書圧縮

val obs = spark.read.parquet("s3://xxxx/parquettests/by_pat/") 
val single = obs.filter($"pat" === "abcd") 
single.explain 

を使用して、私は、述語プッシュダウン

+- Filter (isnotnull(pat#930) && (pat#930 = abcd)) 
    +- FileScan parquet PartitionFilters: [], 
         PushedFilters: [IsNotNull(pat), EqualTo(pat,abcd)] 

バック3メガバイトで、この(200個のファイルの実行時間を実行計画を取得それぞれ、 "pat"で区切られたハッシュ)は32秒です。

pat = abcdが1つのファイルにのみ含まれているとすれば、それは3MBのファイルを読み込み、他のすべてをスキップする32秒です。たくさん聞こえます。

私はこれらのファイルのparquet-toolsをチェックして、その列のPLAIN_DICTIONARYに「RLE:BIT_PACKED VLE:PLAIN [more] VC:21400」の2ページを記載しています。

したがって、私は辞書の圧縮がPLAINに戻っていると思われますが、わかりませんし、変更しようとするすべての試みが機能しませんでした。

思考?

答えて

0

ディクショナリエンコードされた列のプレディケートプッシュダウンは、現在、Spark 2.2およびParquet 1.8ではサポートされていません。
それに加えて、あなたの寄木細工のファイルは小さすぎます.1つまたは2つのファイルにマージする必要があります。

関連する問題