Spark bisa membaca dan tulis data ke/dari database relasional menggunakan sumber data JDBC (seperti yang Anda lakukan pada contoh kode pertama Anda).
Selain itu (dan sepenuhnya terpisah), percikan memungkinkan penggunaan SQL untuk menanyakan tampilan yang dibuat di atas data yang sudah dimuat ke dalam DataFrame dari beberapa sumber. Misalnya:
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()
Hanya "tabel" (disebut tampilan, pada Spark 2.0.0) yang dibuat dengan cara ini yang dapat ditanyakan menggunakan SparkSession.sql
.
Jika data Anda disimpan dalam database relasional, Spark harus membacanya dari sana terlebih dahulu, dan baru setelah itu ia dapat menjalankan komputasi terdistribusi apa pun pada salinan yang dimuat. Intinya - kita dapat memuat data dari tabel menggunakan read
, buat tampilan sementara, lalu kueri:
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 ... ")