不确定为什么这不起作用,但我只是尝试应用以下但仍然获得包含text
的表(mysql)的模式的spark版本of varchar(128)我试图指定。尝试使用jdbc write为我的列创建自定义数据类型。尝试使用spark 2.1.0:
def df2DB(
df: DataFrame,
batchSize: Int,
numPartitions: Int,
database: String,
table: String): Unit = {
val mdb = new MetadataBuilder()
mdb.putString("col1", "INT")
mdb.putString("col2", "VARCHAR(128)")
mdb.putString("col3", "VARCHAR(128)")
val createTableColTypes = mdb.build().json
df.write.format("jdbc")
.option("createTableColumnTypes", createTableColTypes)
.option("url", url)
.option("dbtable", s"${database}.${table}")
.option("user", user)
.option("password", pass)
.option("driver", driver)
.option("batchsize", batchSize)
.option("numPartitions", numPartitions)
.save()
}
我也试过这种格式但没有成功:
df.write.format("jdbc")
.mode(SaveMode.Overwrite)
.option("url", url)
.option("dbtable", s"${database}.${table}")
.option("user", user)
.option("password", pass)
.option("driver", driver)
.option("batchsize", batchSize)
.option("numPartitions", numPartitions)
.option("createTableColumnTypes", "COL1 INT, COL2 VARCHAR(128)" )
.save()
即使我尝试使用这样的createTableOptions
,我也会收到sql语法错误。我没有找到任何一起或分开使用这些选项的好例子:
.option("createTableOptions", "CREATE TABLE tbl1 (col1 int, col2 VARCHAR(128))").save()
答案 0 :(得分:0)
不要将列名的JSON创建为数据类型,而是尝试使用逗号分隔的列名列表,其数据类型如下:
def df2DB(
df: DataFrame,
batchSize: Int,
numPartitions: Int,
database: String,
table: String): Unit = {
df.write.format("jdbc")
.option("createTableColumnTypes", "col1 INT, col2 VARCHAR(128), col3 VARCHAR(128)")
.option("url", url)
.option("dbtable", s"${database}.${table}")
.option("user", user)
.option("password", pass)
.option("driver", driver)
.option("batchsize", batchSize)
.option("numPartitions", numPartitions)
.save()
}