Mysql
 sql >> база данни >  >> RDS >> Mysql

Spark SQL/Hive заявката отнема завинаги с Join

На първо място типът заявка, която извършвате, е изключително неефективна. Засега (Spark 1.5.0*), за да се извърши присъединяване по този начин, и двете таблици трябва да бъдат разбъркани / хеш-разделени всеки път, когато се изпълнява заявка. Не би трябвало да е проблем в случай на users таблица, където user_id = 123 предикатът най-вероятно е избутан надолу, но все пак изисква пълно разбъркване на user_address .

Освен това, ако таблиците са само регистрирани и не са кеширани, тогава всяко изпълнение на тази заявка ще извлече цял user_address таблица от MySQL към Spark.

Не е точно ясно защо искате да използвате Spark за приложение, но настройката на една машина, малките данни и типът заявки предполагат, че Spark не е подходящ тук.

Най-общо казано, ако логиката на приложението изисква достъп до един запис, тогава Spark SQL няма да работи добре. Той е предназначен за аналитични заявки, а не като заместител на OLTP база данни.

Ако една таблица/кадър от данни е много по-малък, можете да опитате да излъчвате.

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

* Това трябва да се промени в Spark 1.6.0 с SPARK-11410 което трябва да даде възможност за постоянно разделяне на таблицата.



  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 КЛЮЧ/УНИКАЛЕН КЛЮЧ

  2. Извличане на редове, групирани по час с MySQL

  3. Как да избегнете фрагментация, когато използвате първичен ключ NHibernate guid.comb в MySQL?

  4. Функция за извличане на jQuery-Ajax с PHP класове и функции

  5. Попълване на HTML/PHP падащо меню въз основа на първата селекция от падащо меню