O Spark pode ler e escrever dados de/para bancos de dados relacionais usando a fonte de dados JDBC (como você fez em seu primeiro exemplo de código).
Além disso (e completamente separadamente), o spark permite usar SQL para consultar visualizações que foram criados sobre dados que já foram carregados em um DataFrame de alguma fonte. Por exemplo:
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()
Apenas "tabelas" (chamadas visualizações, a partir do Spark 2.0.0) criadas dessa maneira podem ser consultadas usando
SparkSession.sql
. Se seus dados estiverem armazenados em um banco de dados relacional, o Spark terá que lê-los primeiro e só então poderá executar qualquer computação distribuída na cópia carregada. Conclusão - podemos carregar os dados da tabela usando
read
, crie uma visualização temporária e consulte-a: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 ... ")