Spark kan läsa och skriv data till/från relationsdatabaser med JDBC-datakällan (som du gjorde i ditt första kodexempel).
Dessutom (och helt separat) tillåter spark att använda SQL för att fråga vyer som skapades över data som redan laddats in i en DataFrame från någon källa. Till exempel:
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()
Endast "tabeller" (kallade vyer, från och med Spark 2.0.0) som skapats på detta sätt kan efterfrågas med SparkSession.sql
.
Om din data lagras i en relationsdatabas måste Spark läsa den därifrån först, och först då skulle den kunna utföra en distribuerad beräkning på den laddade kopian. Summa summarum - vi kan ladda data från tabellen med read
, skapa en tillfällig vy och fråga den sedan:
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 ... ")