Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Spark SQL / Hive Query tồn tại vĩnh viễn khi tham gia

Trước hết, loại truy vấn bạn thực hiện cực kỳ kém hiệu quả. Hiện tại (Spark 1.5.0 *) để thực hiện phép nối như thế này, cả hai bảng phải được xáo trộn / phân vùng băm mỗi khi truy vấn được thực thi. Sẽ không có vấn đề gì trong trường hợp người dùng users bảng trong đó user_id = 123 vị từ rất có thể được đẩy xuống nhưng vẫn yêu cầu xáo trộn đầy đủ trên user_address .

Hơn nữa, nếu các bảng chỉ được đăng ký và không được lưu vào bộ nhớ đệm, thì mọi thực thi truy vấn này sẽ tìm nạp toàn bộ user_address bảng từ MySQL sang Spark.

Không rõ chính xác tại sao bạn muốn sử dụng Spark cho ứng dụng nhưng thiết lập máy đơn lẻ, dữ liệu nhỏ và loại truy vấn cho thấy Spark không phù hợp ở đây.

Nói chung, nếu logic ứng dụng yêu cầu một quyền truy cập bản ghi thì Spark SQL sẽ không hoạt động tốt. Nó được thiết kế cho các truy vấn phân tích không phải là sự thay thế cơ sở dữ liệu OLTP.

Nếu một bảng / khung dữ liệu nhỏ hơn nhiều, bạn có thể thử phát.

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")

* Điều này sẽ thay đổi trong Spark 1.6.0 với SPARK-11410 sẽ cho phép phân vùng bảng liên tục.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lưu thông tin thẻ tín dụng trong cơ sở dữ liệu MySQL?

  2. Cách kết nối Cơ sở dữ liệu MySQL với Trang web PHP

  3. Gettext hoặc bản dịch cơ sở dữ liệu

  4. Nhận vị trí hàng trong truy vấn MYSQL

  5. MySQL - Chọn với COUNT trả về một hàng NULL