如何将“all string”dataframe以append模式写入带有int和varchar列的目标表,从而激发jdbc

7rfyedvj  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(381)

我从csv文件创建spark dataframe,并尝试将其插入到包含integer和varchar列的rdbms表中。因为我的Dataframe都是字符串类型,所以它在“append”模式下失败。如果我使用覆盖模式,rdbms表将用所有varchar列重新创建。如何通过处理sparkDataframe中的dataype将数据以append模式插入rdbms表?

ct3nt3jp

ct3nt3jp1#

在读取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");

一旦这个Dataframe具有所需的模式,就可以附加到现有表中。
请检查:https://docs.databricks.com/data/data-sources/read-csv.html

相关问题