Spark puede leer y escribir datos a/desde bases de datos relacionales utilizando la fuente de datos JDBC (como lo hizo en su primer ejemplo de código).
Además (y completamente por separado), Spark permite usar SQL para consultar vistas que se crearon sobre datos que ya se cargaron en un DataFrame desde alguna fuente. Por ejemplo:
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()
Solo las "tablas" (llamadas vistas, a partir de Spark 2.0.0) creadas de esta manera se pueden consultar usando SparkSession.sql
.
Si sus datos están almacenados en una base de datos relacional, Spark primero tendrá que leerlos desde allí, y solo entonces podrá ejecutar cualquier cálculo distribuido en la copia cargada. En pocas palabras:podemos cargar los datos de la tabla usando read
, cree una vista temporal y luego consúltela:
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 ... ")