2017-01-05 5 views
1

最適なスパーククエリを作成してください。あなたは右の データセットをロードした後にどこかのフィルタ演算子を実行すると、対応するSQLクエリを使用してSQLがダウン に場所/フィルタ述語をプッシュしようとスパークデータソース、データセット述語pushdowの後.as(Encoders.kryo)

:私は約predicate pushdownを読みました句(またはデータソースの適切な言語が何であっても )です。

述語プッシュダウンは.as(Encoders.kryo(MyObject.class))操作の後に機能しますか?

spark 
    .read() 
    .parquet(params.getMyObjectsPath()) 

    // As I understand predicate pushdown will work here 
    // But I should construct MyObject from org.apache.spark.sql.Row manually 

    .as(Encoders.kryo(MyObject.class)) 

    // QUESTION: will predicate pushdown work here as well? 

    .collectAsList(); 

答えて

1

これは動作しません。 Encoders.kryoを使用した後は、柱状ストレージから実際には恩恵を受けず、述部のプッシュダウンや高度な最適化はもちろんのこと、個々のフィールドへの効率的な(オブジェクトの直列化なしの)アクセスを提供しません。blob

Encoders.beanの場合は、MyObjectクラスで許可されている方が良い場合があります。一般にDataset最適化を最大限に活用するには、少なくとも特定のエンコーダを使用してエンコードできるタイプが必要です。

関連Spark 2.0 Dataset vs DataFrame