Spark scala 架构未在加载时强制执行



我正在 Spark shell 上尝试一个 Spark scala 示例,如下所示;

val myManualSchema = StructType(Array(StructField("DEST_COUNTRY_NAME", StringType, true), 
StructField("ORIGIN_COUNTRY_NAME",StringType
, true), StructField("count", LongType, nullable=false)))
val dfNew = spark.read.format("json").schema(myManualSchema).load("/test.json")
dfNew.printSchema()

我得到的输出如下;

root
|-- DEST_COUNTRY_NAME: string (nullable = true)
|-- ORIGIN_COUNTRY_NAME: string (nullable = true)
|-- count: long (nullable = true)

我期待count列被nullable=false,但它似乎没有被强制执行。但是,当我从此数据帧创建新的数据帧并在那里设置架构时,它可以工作。这就是我所做的;

val dfSchemaTest = spark.createDataFrame(dfNew.rdd,myManualSchema)
scala> dfSchemaTest.printSchema()
root
 |-- DEST_COUNTRY_NAME: string (nullable = true)
 |-- ORIGIN_COUNTRY_NAME: string (nullable = true)
 |-- count: long (nullable = false)

如果有人可以在下面指出我的错误,因为在加载数据文件时没有强制执行架构,我将不胜感激。

没有什么可以做的,因为可空性是由文件格式强制执行的。这正是 Spark 所做的 - 如果数据源无法确保该列不为空,则在读取时也不能DataFrame

相关内容

  • 没有找到相关文章

最新更新