Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark:从另一列创建新列,但不可为null_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark Spark:从另一列创建新列,但不可为null

Apache spark Spark:从另一列创建新列,但不可为null,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个简单的问题,但可以找到一个简单的解决办法 我注意到以下几点: myDF.withColumn("newColumn", col("aNullableColumn")) 然后在模式中,newColumn变为可空,即使aNullableColumn中没有空值 如何使newColumn不可为空 我在谷歌上搜索了一下,找到的唯一解决方案是重写架构并重新创建数据帧,但这不是一个好的解决方案。如果您完全确定您的列没有null值,您可以这样做来更改新列的nullability属性: from pys

我有一个简单的问题,但可以找到一个简单的解决办法

我注意到以下几点:

myDF.withColumn("newColumn", col("aNullableColumn"))
然后在模式中,
newColumn
变为可空,即使
aNullableColumn
中没有空值

如何使
newColumn
不可为空


我在谷歌上搜索了一下,找到的唯一解决方案是重写架构并重新创建数据帧,但这不是一个好的解决方案。

如果您完全确定您的列没有
null
值,您可以这样做来更改新列的nullability属性:

from pyspark.sql.functions import col, lit, coalesce

myDF.withColumn("newColumn", coalesce(col("aNullableColumn"), lit(0)))
并确保在
lit
函数中使用正确的数据类型(与
anAllableColumn
的数据类型相同)。还要注意,如果存在
null
值,则
coalesce
函数会将其更改为您在
lit
中提供的值

之所以这样做,是因为
coalesce
处理
nullable
属性的方式。这直接取自Spark源代码:

如果联合的所有子项都可为空,或者如果它没有子项,则联合是可为空的


这里的第二个子项是
lit(0)
,它不可
null
,因此结果列也不可
null

您的最终目标是什么?Spark不会强制执行它。字段
newColumn
被设置为不可为空,我想保持它不可为空(因为它是强制的)。当我更改它的值时,我不希望它的可空属性更改。我还测试了when(col(“aNullableColumn”).isnull,46)。否则(col(“aNullableColumn”)),但它仍然可以为null