我正在尝试将数组转换为 Decimal(30,0) 以便在动态选择中使用:
WHERE array_contains(myArrayUDF(), someTable.someColumn)
但是,当使用以下方法进行投射时:
val arrIds = someData.select("id").withColumn("id", col("id")
.cast(DecimalType(30, 0))).collect().map(_.getDecimal(0))
Databricks 接受了这一点,但签名看起来已经错了: intArrSurrIds: Array[java.math.BigDecimal] = Array(2181890000000,...) // 即 BigDecimal
这导致以下错误:
SQL 语句中的错误:AnalysisException:无法解析.. 由于数据类型不匹配:函数 array_contains 的输入应该是数组,后跟具有相同元素类型的值,但它是 [array<decimal(38,18)>,decimal(30 ,0)]
如何在 Spark Databricks Scala 笔记本中正确转换为 decimal(30,0) 而不是 decimal(38,18) ?
任何帮助表示赞赏!