2017-06-29 3 views
0

私はジュピターのノートブックで、sparkデータフレームを作成し、spark 2.0.1を使用してpythonでs3に保存しています。コードはsparkで再利用する前に、s3バケットを適切に削除/クリアするにはどうすればよいですか?

action = 'CREATE' 
if action == 'CREATE': 
    df = dfA.filter(...) 
    df = df.join(...) 
    df.coalesce(4).write.format('parquet').save('s3://my/path') 
elif action == 'LOAD': 
    df = spark.read.parquet('s3://my/path') 

ようになり、私はそれだけで2(すべてのレコードが複製された持っている必要があるときにいくつかの点で、私はバグを持っていたし、それに4つの項目を持っていたDF(特定のクエリのための4)を書いたと思います - おそらく、私が最初にそれを取り除かずに何かに参加していたからでしょう)。

私は古いs3:// my/pathを削除した後、その論理を作成して場所を書き込むことができることを確認できます。私のdfは、私が期待する2つの項目を持っています。

私が混乱しているのは、データフレームをロードするLOADロジックを実行すると、2つのアイテムが間違っていて、dfがs3から読み込まれたものに置き換えられた場合、誤った4つのアイテムそれ。

新しいパス(s3://my/path2)を使い始めると、作成と読み込みのこの演習が機能します。

s3のバグのようですか、それともスパークですか?

答えて

0

これはバグではなく、s3の動作であり、新しいオブジェクトのPUTSに対する読み込み後の整合性、上書きのPUTSおよびDELETESオブジェクトの最終的な一貫性があります。データを削除してしばらくの間リストに表示されることがありますが、最終的にすべてのゾーンに削除が完全に伝播してからしばらくしてから、正しいデータが一覧表示されます(http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel

0

@ madhan-s answer私の上書き/再読み込みはすべてインタラクティブに行われ、aws s3のページを再読み込みして、そこにいないときにオブジェクトを読み取れなかったことを確認して、これについて説明しているかどうかはわかりません(ただし、 !私はもののようなものを学ぶ必要がある!)が起こっている可能性があります

何か、私はその時点で

df = make_bad_df() 
df.save_to_s3() 
df = read_from_s3() 
df.persist() 

をしたと思うということです、多分、私はその後、削除した場合、再書き込み、それはバケットをS3、及びスパークはS3オブジェクトが変更された知る方法がない

df2 = read_from_s3() 

ような何かを - 私は、特定のS3オブジェクトから読み取るデータフレームを持続しているだろう火花は言うでしょう - ああ!私はすでにデータフレームを保存しています。メモリ/ローカルディスクから取得しますか?

+0

- いいえ、スパークしません。変数を単独のままにして、データセットを保持したいとします。そして、はい、S3の一貫性は状況を悪化させているように見えます。 –

関連する問題