Spark SQL 2.1 是不是支持将临时表或配置单元表写入 Mysql/Oracle?
Posted
技术标签:
【中文标题】Spark SQL 2.1 是不是支持将临时表或配置单元表写入 Mysql/Oracle?【英文标题】:Does Spark SQL 2.1 support write temp table or hive table to Mysql/Oracle?Spark SQL 2.1 是否支持将临时表或配置单元表写入 Mysql/Oracle? 【发布时间】:2019-03-29 04:26:06 【问题描述】:我使用的是 Spark SQL 2.1,
我能够从 mysql/oracle 读取数据作为 Spark SQL 中的临时视图:
val url = "jdbc:mysql://localhost:3306/db1"
val user = "root"
val pass = "root"
val sql =
s"""
CREATE OR REPLACE TEMPORARY VIEW foobar
USING org.apache.spark.sql.jdbc
OPTIONS (url '$url', dbtable '(select id, name, now() from db1.company) as x', user '$user', password '$pass', numPartitions '3')
""".stripMargin(' ')
val session = SparkSession.builder().appName("SparkSQL003").master("local[4]").getOrCreate()
session.sql(sql)
我的问题是 Spark SQL 2.1 是否支持使用纯 sql 将临时视图或 Hive 表写回 oracle/mysql
【问题讨论】:
【参考方案1】:我在这里发布我的发现,Spark SQL 在 2.1.0 中支持此功能
test("SparkSQL006")
val url = "jdbc:mysql://localhost:3306/db1"
val user = "root"
val pass = "root"
val sql =
s"""
CREATE OR REPLACE TEMPORARY VIEW foobar
USING org.apache.spark.sql.jdbc
OPTIONS (url '$url', dbtable 'db1.company', user '$user', password '$pass', numPartitions '3')
""".stripMargin(' ')
val session = SparkSession.builder().appName("SparkSQL003").master("local[4]").getOrCreate()
import session.implicits._
session.createDataset(Seq((100,"IBM"), (200, "Apply"))).createOrReplaceTempView("t")
session.sql(sql)
session.sql(
"""
insert into foobar select * from t
""".stripMargin(' '))
【讨论】:
以上是关于Spark SQL 2.1 是不是支持将临时表或配置单元表写入 Mysql/Oracle?的主要内容,如果未能解决你的问题,请参考以下文章
Spark - 如何将约 20TB 的数据从 DataFrame 写入配置单元表或 hdfs?