Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Spark SQL dan MySQL- SaveMode.Overwrite tidak memasukkan data yang dimodifikasi

Masalahnya ada di kode Anda. Karena Anda menimpa tabel yang Anda coba baca, Anda secara efektif menghapus semua data sebelum Spark benar-benar dapat mengaksesnya.

Ingat bahwa Spark malas. Saat Anda membuat Dataset Spark mengambil metadata yang diperlukan, tetapi tidak memuat data. Jadi tidak ada cache ajaib yang akan mempertahankan konten asli. Data akan dimuat ketika benar-benar diperlukan. Ini dia saat Anda menjalankan write tindakan dan saat Anda mulai menulis, tidak ada lagi data yang harus diambil.

Yang Anda butuhkan adalah sesuatu seperti ini:

  • Buat Dataset .
  • Terapkan transformasi yang diperlukan dan tulis data ke tabel MySQL perantara.

  • TRUNCATE masukan asli dan INSERT INTO ... SELECT dari tabel perantara atau DROP tabel asli dan RENAME tabel perantara.

Alternatif, tetapi pendekatan yang kurang menguntungkan, adalah:

  • Buat Dataset .
  • Terapkan transformasi yang diperlukan dan tulis data ke tabel Spark persisten (df.write.saveAsTable(...) atau setara)
  • TRUNCATE masukan asli.
  • Baca kembali data dan simpan (spark.table(...).write.jdbc(...) )
  • Lepaskan tabel Spark.

Kami tidak bisa cukup menekankan bahwa menggunakan Spark cache / persist bukanlah cara untuk pergi. Bahkan dengan StorageLevel yang konservatif (MEMORY_AND_DISK_2 / MEMORY_AND_DISK_SER_2 ) data yang di-cache dapat hilang (kegagalan node), yang menyebabkan kesalahan koreksi senyap.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menyimpan bentuk overlay peta Google di database?

  2. Cara memuat data tanggal di MySQL saat menggunakan LOAD DATA

  3. MySQL NULLIF() Dijelaskan

  4. Bagaimana cara menginstal driver pdo di gambar buruh pelabuhan php?

  5. Bagaimana cara menetapkan sql tanggal &waktu penuh menggunakan Java, dan bukan hanya tanggal?