sql-server - 我可以强制 spark sql 使用 TINYINT 而不是 BYTE 吗?
问题描述
我正在尝试使用 Spark 从 Hive 表中提取数据并将其保存在 SQL Server 表中。我面临的一个问题是,某些列正在使用数据类型被拉入 Dataframe BYTE
。我希望这些被拉出来,TINYINT
或者INT
如果TINYINT
是不可能的。
我这样做的基本方式是这样的:
query = [SQL query]
val df = sql(query)
df.write.jdbc([connection info])
如何将模式应用于强制某些数据类型的过程?
解决方案
要将 Spark DataFrame 列类型从一种数据类型更改为另一种数据类型,可以使用“withColumn()”、“cast function”、“selectExpr”和 SQL 表达式来完成。请注意,您要转换为的类型应该是 DataType 类的子类。
在 Spark 中,我们可以将 DataFrame 列更改或转换为仅以下类型,因为这些是 DataType 类的子类。
ArrayType、BinaryType、BooleanType、CalendarIntervalType、DateType、HiveStringType、MapType、NullType、NumericType、ObjectType、StringType、StructType、TimestampType
下面是一个带有 sql 表达式的示例:
val df2 = df.selectExpr("cast(year as int) year")
这个问题的详细回答如下:
推荐阅读
- javascript - AngularFirestore - 限制和启动后不工作
- html - 通过@Media 屏幕更改背景图片
- c - 数据记录时 USB 棒的预期寿命
- python - 从 Python 向 Wix 发送 POST 请求?
- python - 关于 Ubuntu 18.04 LTS 和 python 的问题
- python - Python:如何反转列表中子列表的顺序?
- swift - 在 swift 中从主线程访问后,不得从后台线程对布局引擎进行修改
- ios - ios中的WebView以桌面模式打开
- json - Hibernate 不支持 JSON 的双向 @ManytoMany 映射?
- android - 无法解决 DataBinding 的 AcitivityMainBinding