SPARK -NVL功能数据类型不匹配错误



使用spark sql中的jdbc dataSource我们尝试在查询以下运行

select nvl( columnName , 1.0) from tablename

给出错误为

cannot resolve 'nvl(tablename.`columnname`, 1.0BD)' due to data type mismatch: input to function coalesce should all be the same type, but it's [decimal(38,10), decimal(2,1)]

我知道我们可以用

解决这个问题
select nvl( columnname , CAST( 1.0 as decimal(38,10))) from tablename

看来我需要找到每一列的数据类型并投入其中。

  1. 还有其他方法可以处理吗?
  2. 在加载诸如CSV格式之类的数据框时,我可以预先提供架构定义。[https://issues.apache.org/jira/browse/spark-16848]
  3. 如何转换每列加载的数据帧类型。
  1. 您可以在NVL上使用coce。结合的输入被施放为"最佳"常见数据类型。
  2. JDBC连接使用数据库架构作为其架构,因此不可能进行架构。
  3. 您通过添加另一个 select将所有列投放到另一个数据类型,这很容易在dataframe/dataset api中:

    // Create some toy data.
    val df = spark.range(100).select($"id", (rand(2) * 10).as("a"))
    df.printSchema
    // Define the casts.
    val casts = Seq(col("id").cast("int"), col("a").cast("int"))
    // Apply the casts.
    df.select(casts: _*).printSchema
    

相关内容

  • 没有找到相关文章

最新更新