java - Spark scala 模式在加载时未强制执行

标签 java scala dataframe apache-spark apache-spark-sql

我正在 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但它似乎没有得到执行。然而,当我从这个 DataFrame 创建一个新的 DataFrame 并在那里设置架构时,它就可以工作了。这就是我所做的;

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 所做的 - 如果数据源无法确保该列不为 null,则 DataFrame 在读取时也无法确保。

关于java - Spark scala 模式在加载时未强制执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54433142/

相关文章:

python - 计算数据框中唯一共同作者的数量

python - 如何在keras中使用flow_from_dataframe输入多张图片?

java - Hibernate 和 Jackson 惰性序列化

java - Apache commons csv解析尝试读取集合大小后面的下一条记录

performance - 如何有效地从 Spark 中的每一列中找到不同的值

scala - 反向 AJAX( cometd )和 Spring MVC 与 Scala/LIFT?

python - 获取前一个较小值的索引

java - 在java中实现一个定时器

java - 如何检测具有多个显示器的系统中的屏幕位置?

scala - 为什么 scala 无法推断具有多个参数列表的函数的公共(public)返回类型?