apache-spark - Spark:从另一个创建新列但不能为空
问题描述
我有一个简单的问题,但可以找到一个简单的解决方案。
我注意到以下内容:
myDF.withColumn("newColumn", col("aNullableColumn"))
然后在模式newColumn
中变为可为空,即使aNullableColumn
.
如何获得newColumn
不可为空?
我用谷歌搜索了一下,我发现的唯一解决方案是重写架构并重新创建数据框,但这不是很好的解决方案。
解决方案
如果您绝对确定您的列没有null
值,您可以这样做来更改新列的可空性属性:
from pyspark.sql.functions import col, lit, coalesce
myDF.withColumn("newColumn", coalesce(col("aNullableColumn"), lit(0)))
并确保在lit
函数内使用正确的数据类型(与您的数据类型相同aNullableColumn
)。另请注意,如果有null
值,该coalesce
函数会将其更改为您在内部提供的值lit
。
这样做的原因是coalesce
处理nullable
财产的方式。这直接取自 Spark 源代码:
如果 Coalesce 的所有子代都可以为空,或者它没有子代,则它可以为空。
这里是第二个孩子lit(0)
,这不是nullable
,因此结果列也不nullable
是。
推荐阅读
- c# - 如何在 C# 中使用 tiny-yolo 和 OpenCvSharp Wrapper?
- python - 从熊猫数据框创建自定义热图
- spring-cloud-dataflow - java.lang.IllegalStateException when binding mysql service to skipper server in PCF
- r - 如何编写与英特尔 MKL 链接的 CRAN 可发布包?
- node.js - 尽可能快地在 MongoDB 中加载一百万条记录
- angular - 避免工作区中 Angular 项目的相对路径
- python - 在函数中调用函数时如何修复python中的AttributeError?
- python - 如何将我的数组保存到 Python 中的 matlab 结构中?
- r - 两个数据集之间的重叠
- function - 在IE中找不到切换LI元素的解决方案,其他浏览器都可以