cast(NULL as smallint)
вам нужно сделать ... это преобразует ноль в тип short
, как показано на схеме ниже.
val df1 =spark.sql(
" select 1 as column1 , 2 column2 , cast(NULL as smallint) as column3 from table ")
df1.show
df1.printSchema()
Результат:
+-------+-------+-------+
|column1|column2|column3|
+-------+-------+-------+
| 1| 2| null|
+-------+-------+-------+
root
|-- column1: integer (nullable = false)
|-- column2: integer (nullable = false)
|-- column3: short (nullable = true)
по-другому это будет тип null, а не small int type ..
val df1 =spark.sql(" select 1 as column1 , 2 column2 , NULL as column3 from table ")
df1.show
df1.printSchema()
+-------+-------+-------+
|column1|column2|column3|
+-------+-------+-------+
| 1| 2| null|
+-------+-------+-------+
root
|-- column1: integer (nullable = false)
|-- column2: integer (nullable = false)
|-- column3: null (nullable = true)
По этой причине вы получаете исключение.