【发布时间】:2022-10-07 01:35:20
【问题描述】:
据我所知,Spark executors同时处理多个任务,保证并行处理数据。问题来了。当连接到外部数据存储时,比如说mysql,有多少任务可以完成这个工作?换句话说,是同时创建多个任务,每个任务读取所有数据,还是只从一个任务中读取数据并分发以其他方式到集群?向mysql写入数据怎么样,有多少个连接?
这是一些从/向mysql读取或写入数据的代码:
def jdbc(sqlContext: SQLContext, url: String, driver: String, dbtable: String, user: String, password: String, numPartitions: Int): DataFrame = {
sqlContext.read.format(\"jdbc\").options(Map(
\"url\" -> url,
\"driver\" -> driver,
\"dbtable\" -> s\"(SELECT * FROM $dbtable) $dbtable\",
\"user\" -> user,
\"password\" -> password,
\"numPartitions\" -> numPartitions.toString
)).load
}
def mysqlToDF(sparkSession:SparkSession, jdbc:JdbcInfo, table:String): DataFrame ={
var dF1 = sparkSession.sqlContext.read.format(\"jdbc\")
.option(\"url\", jdbc.jdbcUrl)
.option(\"user\", jdbc.user)
.option(\"password\", jdbc.passwd)
.option(\"driver\", jdbc.jdbcDriver)
.option(\"dbtable\", table)
.load()
// dF1.show(3)
dF1.createOrReplaceTempView(s\"${table}\")
dF1
}
}
标签: mysql apache-spark