数据湖探索 DLI-Spark 2.4.x与Spark 3.3.x版本在通用队列的差异对比:Spark将不可为null的模式转换为可空
Spark将不可为null的模式转换为可空
- 说明:
在Spark 2.4.x版本中,当用户指定的schema包含不可为空的字段时,Spark会将这些不可为null的模式转换为可空的。
但是在Spark 3.3.x版本中,Spark尊重用户指定的schema中的nullability,即如果字段被定义为不可为空,Spark会保持该配置要求,不会自动转换为可空的字段。
- Spark2.4.x:在Spark 2.4.x版本中,当用户指定的schema包含不可为空的字段时,Spark会将这些不可为null的模式转换为可空的。
- Spark3.3.x:Spark不会自动转换为可空的字段。
如果希望在Spark 3.3.x版本中恢复到Spark 2.4.x版本的执行方式,您可以通过将 spark.sql.legacy.respectNullabilityInTextDatasetConversion设置为true来实现。
- 升级引擎版本后是否对作业有影响:
有影响。
- 示例代码:
执行sql:
spark.read.schema(StructType( StructField("f1", LongType, nullable = false) :: StructField("f2", LongType, nullable = false) :: Nil) ).option("mode", "DROPMALFORMED").json(Seq("""{"f1": 1}""").toDS).show(false);
- Spark 2.4.5
|f1 |f2 | +---+---+ |1 |0 |
- Spark 3.3.1
|f1 |f2 | +---+----+ |1 |null|
- Spark 2.4.5
- 什么是Spark_如何使用Spark_Spark的功能是什么
- 什么是数据湖探索服务_数据湖探索DLI用途与特点
- 什么是Spark SQL作业_数据湖探索DLISpark SQL作业
- MapReduce服务_什么是Yarn_如何使用Yarn
- 什么是跨源连接-数据湖探索DLI跨源连接
- 数据治理中心_数据开发_数据开发示例_使用教程-华为云
- 分布式消息服务Kafka版与分布式消息服务RocketMQ版的区别_Kafka与RocketMQ对比_Kafka与RocketMQ差异
- Hudi服务_什么是Hudi_如何使用Hudi
- MapReduce工作原理_MapReduce是什么意思_MapReduce流程_MRS_华为云
- 华为云CCE_华为云容器引擎CCE_容器高性能调度