2017-06-06 9 views
0

私はPySparkSpark DataframeはDBに対する変換をサポートしていますか?

df1 = session.read.jdbc(url=self.url, 
         table=self.table, 
         properties={"driver": self.driver, 
            "user": self.user, 
            "password": self.password}) 

または

df1 = sql.read.format("com.databricks.spark.redshift") 
       .options(url=self.url, 
         query=self.table, 
         user=self.user, 
         password=self.password, 
         tempdir="s3://path/data/").load() 

でテーブルを取得し、私が参加し、GROUPBY

df3 = df1.join(df2, df1.id == df2.id) 
df_res = df3.groupBy("id").agg({'tax': 'sum'}) 

のようないくつかの変換を適用DBに対して行われていることでしょうか? 「はい」の場合は、そのことをメモリ内でどのように行うのですか?

答えて

2

これはありません。 Sparkでは、単純な投影と選択(詳細は特定のデータソースの実装に依存します)をプッシュダウンできますが、サポートされているデータソースに明示的に指示されている場合を除き、あなたはtable引数として、あなたはqueryオプションを使用することができますcom.databricks.spark.redshiftsubqueryを渡すjdbcと例えば

。最初の断片で

jdbc)スパークがS3に第二のスニペットに、a single executorを使用して(可能な突起と選択を適用した後の)初期query(プラス突起と選択)の結果を必要なすべてのデータを読み取り、それを読んであろうそこから並行して。どちらの場合でも、Sparkは投影(id, tax)を押し下げることができます。

その後、Sparkはクラスタ内のローカルでデータを処理します。これにはjoinと集計が含まれます。

関連する問題