Spark RDD转DataFrame报错:IntegerType无法接收np.NaN
问题原因分析
核心问题是类型不匹配:你用
np.NaN作为dip字段的空值,但np.NaN本质是float类型,而Spark的IntegerType只能接受Python原生的int或者表示空值的None,根本不识别float类型的np.NaN——哪怕你在Schema里设了nullable: true,允许为空不代表允许传入错误类型的空值。Spark 2.4.x的类型约束:在Spark 2.4.8这个版本里,数据类型的校验很严格,每种类型只能接收对应类型的有效值或
None(对应SQL中的NULL)。np.NaN属于浮点类型,和IntegerType的类型体系不兼容,所以转换时直接触发类型错误。补充说明:如果是FloatType或者DoubleType字段,用
np.NaN是没问题的,但IntegerType不行。要给Integer类型的空字段赋值,必须用Python的None替代np.NaN。
内容的提问来源于stack exchange,提问作者user19627118
相关产品推荐
相关产品推荐

