Mysql
 sql >> Database >  >> RDS >> Mysql

Usa SparkSession.sql() con JDBC

Spark può leggere e scrivi dati a/da database relazionali utilizzando l'origine dati JDBC (come hai fatto nel tuo primo esempio di codice).

Inoltre (e in modo completamente separato), spark consente di utilizzare SQL per eseguire query su viste che sono stati creati su dati che erano già stati caricati in un DataFrame da qualche origine. Ad esempio:

val df = Seq(1,2,3).toDF("a") // could be any DF, loaded from file/JDBC/memory...
df.createOrReplaceTempView("my_spark_table")
spark.sql("select a from my_spark_table").show()

Solo le "tabelle" (chiamate viste, a partire da Spark 2.0.0) create in questo modo possono essere interrogate usando SparkSession.sql .

Se i tuoi dati sono archiviati in un database relazionale, Spark dovrà prima leggerli da lì e solo allora sarà in grado di eseguire qualsiasi calcolo distribuito sulla copia caricata. In conclusione:possiamo caricare i dati dalla tabella usando read , crea una vista temporanea, quindi esegui una query:

ss.read
  .format("jdbc")
  .option("url", "jdbc:mysql://127.0.0.1/database_name")
  .option("dbtable", "schema.tablename")
  .option("user", "username")
  .option("password", "password")
  .load()
  .createOrReplaceTempView("my_spark_table")

// and then you can query the view:
val df = ss.sql("select * from my_spark_table where ... ")