2016-08-16 18 views
1

を使用してハイブパーティションテーブルの上に新しいものと古いデータを交換することは、あなたがpysparkを使用して、特定のハイブのパーティション上の新しいデータで古いデータを交換するために私を導いでした(データフレーム)Pyspark:データフレーム

私はハイブパーティションテーブルを持って、パーティション郡によって。

毎月私はいくつかの郡の記録を取得します。古いデータをそのパーティションの新しいデータで置き換えたいと思っていました。

私はpysparkを使ってスクリプトを開発し、データフレーム内の特定のパーティションに新しいデータをロードしました。今、古いデータをそのパーティションだけの新しいデータに置き換えたいです(ベーステーブルが大きいので)

私はそのパーティションを削除して新しいデータフレームを追加しようとしました。しかし、これは動作していないようです(古い+新しいデータの両方を持っています)。 "Overwrite"はテーブルを削除します。

特定のパーティションだけで古いデータを新しいデータ(new_dataframe)に置き換える方法はありますか?

私が試してみました以下のコード見つけてください: sqlContext.sql new_dataframe.write.mode(+パート1 + ')' '=パーティションを削除db.tblテーブルを変更(パーティションを')( "追加/上書き").format(" parquet ")。partitionBy(" partition ")。saveAsTable( 'db.tbl')

sparkではいくつかのアプローチをお勧めしますか?

私はグーグルでHDFSでパーティションファイルを削除するようなコメントを見ました。私はこれを良いアプローチとは見ていない。 もう1つは、ハイブクエリを実行することです。そのパーティションに上書きを挿入します。これはハイブサイドにあります。

sparkに類似の機能はありますか?

ありがとうございます。

答えて

0

以下は私にとってうまくいく(CDH Spark 2.1.0/Python 2.7)。

>>> df.write.saveAsTable('<table_name>',mode='overwrite',partitionBy=('county')) 

書き込まれるファイルの既定の形式は、私にとっては寄木張りです。だから、私はフォーマットを省いた。

関連する問題