私は Spark Streaming 2.1 を使用しています。キャッシュされたテーブル (parquet、MySQL、またはユーザー定義のデータ ソースなどの Spark 提供のデータ ソースによって読み込まれる) を定期的に更新したいと思います。
テーブルを更新するにはどうすればよいですか?
次のようなテーブルがロードされているとします。
spark.read.format("").load().createTempView("my_table")
そしてそれはまたキャッシュされる
spark.sql("cache table my_table")
次のコードでテーブルを更新するだけで十分であり、次にテーブルがロードされるときに自動的にキャッシュされます。
spark.sql("refresh table my_table")
それとも手動で行う必要があるのでしょうか
spark.table("my_table").unpersist spark.read.format("").load().createOrReplaceTempView("my_table") spark.sql("cache table my_table")
テーブルを同時に更新しても安全ですか?
ScheduledThreadPoolExecutor
同時実行とは、メイン スレッドとは別に更新作業を実行することを意味します。テーブルで refresh を呼び出したときに、Spark がキャッシュされたテーブルを使用している場合は何が起こりますか?
ベストアンサー1
Spark 2.2.0 では、Hive または外部ツールによってテーブルのメタデータが更新された場合に、そのメタデータを更新する機能が導入されました。
APIを使用することでこれを実現できます。
spark.catalog.refreshTable("my_table")
この API は、テーブルのメタデータを更新して一貫性を保ちます。