对于 jdbc 数据帧,如果我指定一个自定义查询,例如
(select * from table1 where col4 > 10.0) AS table1
然后所有列的架构都可以为 null = false
col1: string (nullable = false)
col2: string (nullable = false)
col3: string (nullable = false)
col4: float (nullable = false)
当我使用自定义查询并且结果集包含任何空值时,这会导致空指针异常。我还尝试以编程方式转换模式,但由于火花谱系它仍然失败,因为原始数据框具有受限模式,而不管模式转换的数据框具有什么。
我找到了解决方法。如果我只提供表名,然后提供 select 和 where 子句
sqlContext.read.jdbc(url, table1, dconnectionProperties).
select("col1", "col2", "col3", "col4").
where(s"col4 < 10.0")
架构正确(或者我想要的方式)推断为
col1: string (nullable = true)
col2: string (nullable = true)
col3: string (nullable = true)
col4: float (nullable = true)
但我想使用自定义查询,因为我的查询有一些连接和聚合,我想将它们推送到数据库中执行。
在我们迁移到 spark 2.0.x 之后,这开始出现,在此之前它工作正常