如何使nullable = true,使用withcolumn创建1和0的二进制列时,

Posted

技术标签:

【中文标题】如何使nullable = true,使用withcolumn创建1和0的二进制列时,【英文标题】:how to make nullable = true, When using withcolumn to create a binary column of 1 and 0, 【发布时间】:2020-02-21 11:48:15 【问题描述】:

这是我正在使用的代码

dfn = df.withColumn("id",F.when(F.col("number1") > F.col("number2"), 1 ).otherwise(0))

问题:

它返回integerTypenullable = false

目标:

我想要 doubleTypenullable = true

非常感谢

【问题讨论】:

对于您当前的查询,此列永远不会为空,那么您为什么需要nullable = true?对于doubleType,只需转换返回的值:when(...).otherwise(...).cast("double") 我在运行 VectorAssembler 时遇到了一些麻烦,但我已经发现了问题。还是谢谢 【参考方案1】:
from pyspark.sql.types import DoubleType

dfn = df.withColumn("id",(F.when(F.col("number1") > F.col("number2"), 1 ).otherwise(0)).cast(DoubleType()))
dfn = dfn.withColumn("id", F.when(F.col("id").isNotNull(), F.col("id")).otherwise(F.lit(None)))

dfn.printSchema()

【讨论】:

感谢您的回答,虽然它返回 doubleType 它仍然是 nullable = false 我认为如果您无法重建原始 df,那应该可以解决问题

以上是关于如何使nullable = true,使用withcolumn创建1和0的二进制列时,的主要内容,如果未能解决你的问题,请参考以下文章

如何映射具有相当复杂模式的数据集?

如何在pyspark中转换这个嵌套的json? [复制]

如何打印 spark dataframe

如何在 Spark 数据框中使用嵌套列进行连接

如何在pyspark上更改JSON结构?

如何从 StructType 数组中删除元素?