Spark може да чете и пишете данни към/от релационни бази данни, използвайки източника на данни JDBC (както направихте в първия си пример с код).
В допълнение (и напълно отделно), spark позволява използването на SQL за заявка за изгледи които са създадени върху данни, които вече са заредени в DataFrame от някакъв източник. Например:
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()
Само "таблици" (наречени изгледи, от Spark 2.0.0), създадени по този начин, могат да бъдат запитани с помощта на SparkSession.sql
.
Ако вашите данни се съхраняват в релационна база данни, Spark ще трябва първо да ги прочете от там и едва след това ще може да изпълни каквото и да е разпределено изчисление върху зареденото копие. Долен ред - можем да заредим данните от таблицата с помощта на read
, създайте временен изглед и след това го заявете:
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 ... ")