2017-03-17 27 views
1

テーブル名からParquetデータまでの独自のカスタム対応でSpark SQLクエリを実行する必要があります。 sqlContext.read.parquetで寄木細工のデータを読み込み、DataFramesをdf.registerTempTableに登録することは、私のユースケースではカットされません。なぜなら、これらの呼び出しはSQLクエリの前に実行する必要があるからです。テーブル名をParquetに即座に解決する方法はありますか?

registerTempTableを使用するのではなく、私自身のロジックを使用してテーブル名を解決するAnalyzerを書こうとしています。しかし、UnresolvedRelationを寄木細工データを表すLogicalPlanに解決できる必要がありますが、sqlContext.read.parquetLogicalPlanではなくDataFrameとなります。

DataFramelogicalPlan属性を持つようですが、それはprotected[sql]と表示されています。 ParquetRelationクラスもありますが、それはprivate[sql]です。それは私がLogicalPlanを得る方法のために見つけたすべてです。

自分のロジックでテーブル名をParquetに解決するにはどうすればよいですか?アナライザを使って正しい軌道にいるのでしょうか?

答えて

1

あなたは実際に私は `QueryExecution`クラスの` logicalPlan`を見ていないよ

val myLogicalPlan: LogicalPlan = myDF.queryExecution.logical 
+0

であなたのデータフレームのlogicalPlanを取得することができます。あなたは '論理'を意味しましたか?またはこれはバージョンの相違の問題ですか? – user2357112

+0

ああ、私は論理的な意味だった。そのために残念。私は私の答えを編集します。 –

+0

これはうまくいくように思えますが、私は 'logical'、' analyze'、その他の 'queryExecution'属性を使用するかどうかを注意する必要があります。それは私が思うよりも深い詳細で作業しているような気がします。 'QueryExecution'クラスには' public classではない 'というコメントがありますが、 'private'などのマークは付けられていません。 – user2357112

関連する問題