Spark kan læse og skriv data til/fra relationelle databaser ved hjælp af JDBC-datakilden (som du gjorde i dit første kodeeksempel).
Derudover (og helt separat) tillader spark at bruge SQL til at forespørge på visninger der blev oprettet over data, der allerede var indlæst i en DataFrame fra en eller anden kilde. For eksempel:
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()
Kun "tabeller" (kaldet visninger fra Spark 2.0.0) oprettet på denne måde kan forespørges ved hjælp af SparkSession.sql
.
Hvis dine data er gemt i en relationsdatabase, skal Spark først læse dem derfra, og først derefter vil den være i stand til at udføre enhver distribueret beregning på den indlæste kopi. Nederste linje - vi kan indlæse data fra tabellen ved hjælp af read
, opret en midlertidig visning, og forespørg derefter:
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 ... ")