我的代码有错误。该代码正在将一些数据转储到 Redshift 数据库中。
经过一番调查,我发现了一种在 Spark 控制台中重现它的简单方法。
这工作正常:
scala> Seq("France", "Germany").toDF.agg(avg(lit(null))).write.csv("1.csv")
scala>
但是,如果我将 avg 替换为 max,则会收到错误“CSV 数据源不支持空数据类型。”
scala> Seq("France", "Germany").toDF.agg(max(lit(null))).write.csv("2.csv")
java.lang.UnsupportedOperationException: CSV data source does not support null data type.
max 有什么问题吗?
最佳答案
错误是正确的,因为 AVG 返回 DOUBLE 数据类型
Seq("France", "Germany").toDF.agg(avg(lit(null)).alias("col1")).printSchema
其中 MAX 返回类型为 null
Seq("France", "Germany").toDF.agg(max(lit(null)).alias("col1")).printSchema
因此,当您编写具有 MAX 的数据帧时,它会引发错误,如果您想保存具有 max 的数据帧,请将其显式转换为另一种类型
Seq("France", "Germany").toDF.agg(max(lit(null)).alias("col1").cast(DoubleType)).write.csv("path")
关于scala - Spark 写入: CSV data source does not support null data type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52336988/