Spark kann lesen und schreiben Daten zu/von relationalen Datenbanken mithilfe der JDBC-Datenquelle (wie Sie es in Ihrem ersten Codebeispiel getan haben).
Darüber hinaus (und völlig separat) ermöglicht Spark die Verwendung von SQL zum Abfragen von Ansichten die über Daten erstellt wurden, die bereits aus einer Quelle in einen DataFrame geladen wurden. Zum Beispiel:
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()
Nur auf diese Weise erstellte „Tabellen“ (seit Spark 2.0.0 Views genannt) können mit SparkSession.sql
abgefragt werden .
Wenn Ihre Daten in einer relationalen Datenbank gespeichert sind, muss Spark sie zuerst von dort lesen und kann erst dann verteilte Berechnungen auf der geladenen Kopie ausführen. Fazit - wir können die Daten aus der Tabelle mit read
laden , erstellen Sie eine temporäre Ansicht und fragen Sie sie dann ab:
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 ... ")