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

Spark SQL/Hive Query Membutuhkan Selamanya Dengan Bergabung

Pertama-tama, jenis kueri yang Anda lakukan sangat tidak efisien. Adapun sekarang (Spark 1.5.0*) untuk melakukan join seperti ini, kedua tabel harus diacak / dipartisi hash setiap kali query dijalankan. Seharusnya tidak menjadi masalah jika users tabel di mana user_id = 123 predikat kemungkinan besar didorong ke bawah tetapi masih membutuhkan pengocokan penuh pada user_address .

Selain itu, jika tabel hanya terdaftar dan tidak di-cache, maka setiap eksekusi kueri ini akan mengambil seluruh user_address tabel dari MySQL ke Spark.

Tidak jelas mengapa Anda ingin menggunakan Spark untuk aplikasi, tetapi penyiapan mesin tunggal, data kecil, dan jenis kueri menunjukkan bahwa Spark tidak cocok di sini.

Secara umum jika logika aplikasi memerlukan akses rekaman tunggal maka Spark SQL tidak akan bekerja dengan baik. Ini dirancang untuk kueri analitik, bukan sebagai pengganti basis data OLTP.

Jika satu tabel / bingkai data jauh lebih kecil, Anda dapat mencoba menyiarkan.

import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.functions.broadcast

val user: DataFrame = ???
val user_address: DataFrame = ???

val userFiltered = user.where(???)

user_addresses.join(
  broadcast(userFiltered), $"address_id" === $"user_address_id")

* Ini akan berubah di Spark 1.6.0 dengan SPARK-11410 yang seharusnya mengaktifkan partisi tabel persisten.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mySQL - Penguncian tabel vs Penguncian baris

  2. Perbarui ganti titik koma di SQL mendapat kesalahan sintaks

  3. Python, Brew, dan MySQLdb

  4. aplikasi mogok di JSON jparser membuat permintaan http

  5. mysql.sock hilang; menghasilkan OperationalError:(2002, Tidak dapat terhubung ke server MySQL lokal melalui soket '/tmp/mysql.sock' (2))