Spark、Dataframes、および Python を使用しています。
非常に巨大なデータフレームがあり、すべての行にいくつかの JPG 画像がバイナリ データとして含まれているとします。すべての画像を順番に表示するブラウザを構築したいと考えています。
入力として単一の行を取り、次のようなことを行うビュー関数があります。
def view(row):
windows = popup_window_that_display_image(row.image)
waitKey()
destroy_window(window)
次のコードは、spark-submit オプション--master local[*]で正常に動作します。
df = load_and_compute_dataframe(context, some_arguments)
df.foreach(view)
明らかに、view関数はリモートの Spark エグゼキューターでは実行できません。したがって、上記のコードはyarn-clientモードでは失敗します。
次のコードを使用して、yarn-clientモードで作業できます。
df = load_and_compute_dataframe(context, some_arguments)
data = df.limit(10).collect();
for x in data:
view(w)
欠点は、収集できるアイテムが少ないことです。一度に 10 個または 100 個を超えるアイテムを取得するには、データが大きすぎます。
だから私の質問は:
- エグゼキューターではなく、ドライバーでローカルに DF/RDD 操作を実行する手段はありますか?
- DFで11日から10個集められる何かってある?「ID」列をDFに追加して、それを反復処理する必要がありますか(醜い)?
- この結果を達成する他の方法はありますか?
手伝ってくれてありがとう !