You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Spark-MSSQL连接器时PySpark与SQL Server数据类型映射及配置问询

Spark SQL Server连接器(1.3.0版本)数据类型映射与Schema配置

一、默认PySpark到SQL Server的数据类型映射

以下是com.microsoft.azure:spark-mssql-connector_2.12:1.3.0连接器执行df.write()时,默认的类型转换规则:

PySpark 数据类型SQL Server 对应数据类型
ByteTypeTINYINT
ShortTypeSMALLINT
IntegerTypeINT
LongTypeBIGINT
FloatTypeREAL
DoubleTypeFLOAT(53)
DecimalType(precision, scale)DECIMAL(precision, scale)
StringTypeVARCHAR(MAX)
BinaryTypeVARBINARY(MAX)
BooleanTypeBIT
DateTypeDATE
TimestampTypeDATETIME2
ArrayType/MapType/StructType无默认映射(需手动转换为JSON字符串或拆分存储)

二、createTableColumnTypes选项的正确使用

createTableColumnTypes选项直接指定的是SQL Server的列数据类型(而非Spark类型),格式需符合SQL Server的CREATE TABLE列定义语法。比如:

df.write \
  .format("com.microsoft.sqlserver.jdbc.spark") \
  .option("url", "jdbc:sqlserver://...") \
  .option("dbtable", "target_table") \
  .option("createTableColumnTypes", "name CHAR(64), age INT, description VARCHAR(1024)") \
  .mode("overwrite") \
  .save()

这里的CHAR(64)、INT都是SQL Server的类型,只要这些类型和DataFrame中对应列的Spark类型兼容即可(比如name列是Spark的StringType,对应SQL Server的CHAR(64)是兼容的)。

三、直接指定目标Schema的方法

可以通过以下两种方式直接控制目标表的Schema:

  1. 预先在SQL Server创建表:先手动在SQL Server中定义好目标表的完整Schema,然后用append或overwrite模式写入DataFrame,连接器会自动匹配列名进行写入。
  2. 通过createTableColumnTypes完整定义:把目标表所有列的SQL Server类型都在createTableColumnTypes中指定,相当于在创建表时直接定义了完整Schema,比如:
.option("createTableColumnTypes", "id INT PRIMARY KEY, username VARCHAR(50), register_date DATE, score DECIMAL(5,2)")

内容的提问来源于stack exchange,提问作者Rob G.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 12:30:15