Spark kan lezen en schrijf gegevens van/naar relationele databases met behulp van de JDBC-gegevensbron (zoals u deed in uw eerste codevoorbeeld).
Bovendien (en volledig afzonderlijk) maakt Spark het gebruik van SQL mogelijk om views te bevragen die zijn gemaakt over gegevens die al vanuit een bron in een DataFrame zijn geladen. Bijvoorbeeld:
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()
Alleen "tabellen" (vanaf Spark 2.0.0 genoemd) die op deze manier zijn gemaakt, kunnen worden opgevraagd met SparkSession.sql
.
Als uw gegevens zijn opgeslagen in een relationele database, moet Spark deze eerst van daaruit lezen en pas dan kan het een gedistribueerde berekening uitvoeren op de geladen kopie. Bottom line - we kunnen de gegevens uit de tabel laden met read
, maak een tijdelijke weergave en bevraag deze:
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 ... ")