如何创建none/null值的spark数据帧



我想初始化一个数据帧,其中一些行在spark scala(版本3.2.1(中具有None/Null值。如何做到这一点?

val df = spark.createDataFrame(
Seq((0, "a", true), (1, "b", true), (2, "c", false), (3, "a", false), (4, "a", None), (5, "c", false))
).toDF("id", "category1", "category2")
df.show()

我得到这个错误:

UnsupportedOperationException:不支持类型Any的架构

这是因为BooleanOption[Nothing] (None)最接近的超类型是Any,而spark不支持这一点。要使代码正常工作,唯一需要做的就是将布尔值封装在Option/Some中,因此不需要定义结构类型,spark可以解决这个问题。这将起作用:

Seq((0, "a", Some(true)), (1, "b", Some(true)), (2, "c", Some(false)), (3, "a", Some(false)), (4, "a", None), (5, "c", Some(false)))
.toDF("id", "category1", "category2")

我能够使用以下代码实现您所需的输出:

import org.apache.spark.sql.Row
import org.apache.spark.sql.types.{StructType, StructField, BooleanType};
val data = Seq(Row(true), Row(null))
val schema = List(StructField("boolColName", BooleanType, true))
val df = spark.createDataFrame(spark.sparkContext.parallelize(data), StructType(schema))
df.show()

提供给架构的true指定列是否可以为空

最新更新