sql >> Databáze >  >> RDS >> Mysql

Spark SQL/Hive Query trvá věčnost s připojením

Za prvé, typ dotazu, který provádíte, je extrémně neefektivní. Jako prozatím (Spark 1.5.0*), aby bylo možné provést spojení takto, musí být obě tabulky zamíchány / rozděleny hashovacími oddíly pokaždé, když se provede dotaz. V případě users by to neměl být problém tabulka, kde user_id = 123 predikát je s největší pravděpodobností posunut dolů, ale stále vyžaduje úplné zamíchání user_address .

Navíc, pokud jsou tabulky pouze registrované a nejsou ukládány do mezipaměti, pak každé provedení tohoto dotazu načte celou user_address tabulky z MySQL do Sparku.

Není přesně jasné, proč chcete pro aplikaci používat Spark, ale nastavení jednoho stroje, malá data a typ dotazů naznačují, že Spark se sem nehodí.

Obecně řečeno, pokud aplikační logika vyžaduje přístup k jedinému záznamu, pak Spark SQL nebude fungovat dobře. Je navržen pro analytické dotazy, nikoli jako náhrada databáze OLTP.

Pokud je jedna tabulka / datový rámec mnohem menší, můžete zkusit vysílání.

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

* To by se mělo změnit ve Sparku 1.6.0 s SPARK-11410 což by mělo umožnit trvalé dělení tabulek.



  1. Jak echo náhodné řádky z databáze?

  2. Řetězec připojení DB v souboru Web.config pro použití připojené databáze .mdf nebude fungovat

  3. automatické zvýšení pomocí řetězce čísel a písmen

  4. Nelze převést hodnotu data/času MySQL na System.DateTime