scala - Spark 写入: CSV data source does not support null data type

标签 scala apache-spark apache-spark-sql

我的代码有错误。该代码正在将一些数据转储到 Redshift 数据库中。

经过一番调查,我发现了一种在 Spark 控制台中重现它的简单方法。

这工作正常:

scala> Seq("France", "Germany").toDF.agg(avg(lit(null))).write.csv("1.csv")
scala>

但是,如果我将 avg 替换为 ma​​x,则会收到错误“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.

ma​​x 有什么问题吗?

最佳答案

错误是正确的,因为 AVG 返回 DOUBLE 数据类型

Seq("France", "Germany").toDF.agg(avg(lit(null)).alias("col1")).printSchema

enter image description here

其中 MAX 返回类型为 null

Seq("France", "Germany").toDF.agg(max(lit(null)).alias("col1")).printSchema

enter image description here

因此,当您编写具有 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/

相关文章:

java - Swagger 代码生成 : simple JAX-RS example

scala - 如何使用 SBT 解析器匹配由可选空格包围的字符串

apache-spark - Spark 如何向工作线程发送闭包?

scala - SparkSQL Dataframe 函数是否爆炸保留顺序?

scala - 如何在 Spark 应用程序中进行有效的日志记录

python - Impala 查询在 Pyspark 中返回错误结果

scala - 在 Maven 生成的包中包含 scala-library.jar

存在类型 : compile error 的 Scala 蛋糕模式

java - Windows 环境上的 Apache Spark : spark. eventLog.dir

apache-spark - 将两个数组转换为由特殊分隔符分隔的字符串