【问题标题】:How to create table in mysql database using apache spark如何使用apache spark在mysql数据库中创建表
【发布时间】:2019-12-21 21:24:55
【问题描述】:

我正在尝试创建一个对 创建、读取、写入和更新 MySQL 数据。那么,有没有办法使用 Spark 创建 MySQL 表呢?

下面我有一个在 MySQL 中创建表的 Scala-JDBC 代码 数据库。如何通过 Spark 做到这一点?

package SparkMysqlJdbcConnectivity

import org.apache.spark.sql.SparkSession
import java.util.Properties
import java.lang.Class
import java.sql.Connection
import java.sql.DriverManager

object MysqlSparkJdbcProgram {

  def main(args: Array[String]): Unit = {

    val spark = SparkSession.builder()
      .appName("MysqlJDBC Connections")
      .master("local[*]")
      .getOrCreate()

    val driver = "com.mysql.jdbc.Driver"
    val url = "jdbc:mysql://localhost:3306/world"
    val operationtype = "create table"
    val tablename = "country"
    val tablename2 = "state"

    val connectionProperties = new Properties()

    connectionProperties.put("user", "root")
    connectionProperties.put("password", "root")

    val jdbcDf = spark.read.jdbc(url, s"${tablename}", connectionProperties)

    operationtype.trim() match {
      case "create table" => {
       // Class.forName(driver)
        try{
          val con:Connection = DriverManager.getConnection(url,connectionProperties)
          val result = con.prepareStatement(s"create table ${tablename2} (name varchar(255), country varchar(255))").execute()
          println(result)
          if(result) println("table creation is unsucessful") else println("table creation is unsucessful")
        }
      }

      case "read table" => {

        val jdbcDf = spark.read.jdbc("jdbc:mysql://localhost:3306/world", s"${tablename}", connectionProperties)
        jdbcDf.show()
      }

      case "write table" => {}

      case "drop table"  => {}

    }

  }

}

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    当您编写 jdbcDf 数据帧时,这些表将自动创建。

    jdbcDf
     .write
     .jdbc("jdbc:mysql://localhost:3306/world", s"${tablename}", connectionProperties)
    

    如果你想指定表模式,

    jdbcDf
     .write
     .option("createTableColumnTypes", "name VARCHAR(500), col1 VARCHAR(1024), col3 int")
     .jdbc("jdbc:mysql://localhost:3306/world", s"${tablename}", connectionProperties)
    

    【讨论】:

    • 即使数据框为空,是否也可以创建表?我们有使用 spark 模式在没有任何数据的情况下填充表结构的用例。
    • 您是否尝试先使用 struct 类型创建数据框,然后运行上述步骤?我认为它应该工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2015-09-20
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    相关资源
    最近更新 更多