首页 > 解决方案 > 如何以追加模式将“所有字符串”数据帧写入 Spark JDBC 到具有 int 和 varchar 列的目标表

问题描述

我从 csv 文件创建 spark 数据框,并尝试将其插入到具有 integer 和 varchar 列的 rdbms 表中。由于我的数据框都是字符串类型,因此在“追加”模式下失败。如果我使用覆盖模式,将使用所有 varchar 列重新创建 rdbms 表。如何通过处理 spark 数据框中的数据类型以追加模式将数据插入 rdbms 表?

标签: apache-sparkapache-spark-sqlspark-jdbc

解决方案


在读取 CSV 时,您可以推断架构或以编程方式指定架构。

val diamonds = sqlContext.read.format("csv")
      .option("delimiter"," ").option("quote","")
      .option("header", "true")
      .option("inferSchema", "true")
      .load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv");

import org.apache.spark.sql.types._

val customSchema = new StructType()
  .add("_c0",IntegerType,true)
  .add("carat",DoubleType,true)
  .add("cut",StringType,true)
  .add("color",StringType,true)
  .add("clarity",StringType,true)
  .add("depth",DoubleType,true)
  .add("table",DoubleType,true)
  .add("price",IntegerType,true)
  .add("x",DoubleType,true)
  .add("y",DoubleType,true)
  .add("z",DoubleType,true)
    
    val diamonds_with_schema = spark.read.format("csv")
    .option("header", "true")
    .schema(customSchema)
    .load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv");

一旦您拥有具有所需架构的此数据框,您就可以附加到现有表中。

请检查:https ://docs.databricks.com/data/data-sources/read-csv.html


推荐阅读