首页 > 解决方案 > 我可以强制 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])

如何将模式应用于强制某些数据类型的过程?

标签: sql-serverscalaapache-spark

解决方案


要将 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")

这个问题的详细回答如下:

如何更改 Spark SQL 的 DataFrame 中的列类型?


推荐阅读