1

スパークシェルでは、以下のコードを使用してcsvファイルから読み取ります

val df = spark.read.format("org.apache.spark.csv").option("header", "true").option("mode", "DROPMALFORMED").csv("/opt/person.csv") //spark here is the spark session
df.show()

これが10行を表示すると仮定します。df.show()csv を編集して新しい行を追加した場合、もう一度呼び出すと新しい行が表示されますか? もしそうなら、それはデータフレームがすべてのアクションで外部ソース (この場合は csv ファイル) から読み取ることを意味しますか?

データフレームをキャッシュしていないか、spark セッションを使用してデータフレームを再作成していないことに注意してください

4

2 に答える 2

1

TL;DR DataFrame は RDD と同じです。同じルールが適用されることが期待できます。

このような単純な計画では、答えはイエスです。すべてのショーのデータを読み取りますが、アクションがすべてのデータを必要としない場合 (here0 のように、完全なファイルを読み取ることはありません。

一般的なケース (複雑な実行計画) では、シャッフル ファイルからデータにアクセスできます。

于 2016-12-05T11:40:09.410 に答える
1

各アクションの後、スパークはロードされたデータとその間に使用した中間変数の値を忘れます。

したがって、4 つのアクションを次々に呼び出すと、毎回最初からすべてを計算します。

理由は簡単です。Spark は DAG を構築することで機能します。これにより、データの読み取りからアクションまでの操作のパスが視覚化され、それが実行されます。

これが、キャッシュ変数とブロードキャスト変数が存在する理由です。そのデータまたはデータフレームをN回再利用することがわかっている場合、開発者はそれを知ってキャッシュする責任があります。

于 2016-12-05T17:51:47.410 に答える