在 PySpark 数据框中添加可为空的列
Posted
技术标签:
【中文标题】在 PySpark 数据框中添加可为空的列【英文标题】:Adding a nullable column in PySpark dataframe 【发布时间】:2021-07-29 14:56:58 【问题描述】:在 Spark 中,文字列在添加时不能为空:
from pyspark.sql import SparkSession, functions as F
spark = SparkSession.builder.getOrCreate()
df = spark.createDataFrame([(1,)], ['c1'])
df = df.withColumn('c2', F.lit('a'))
df.printSchema()
# root
# |-- c1: long (nullable = true)
# |-- c2: string (nullable = false)
如何创建可以为空的列?
【问题讨论】:
真正的问题是“为什么你需要一个点亮的空列... 就我而言,我需要创建与另一个数据框相同的架构,但其中包含不同的数据。这包括可空性。 那你为什么不直接创建一个模式呢?从 df.schema 开始。 我认为您应该使用原始用例创建另一个问题。目前,您正在尝试为您想象的解决方案寻求帮助,但可能不是正确的解决方案。它被称为XY_problem 抱歉,如果您无法想象一个用例,并不意味着它不存在。我遇到了这个问题并找到了答案here。然后我做得更好,所以我决定把它贴在这里。后来我阅读了更多内容,发现this highly-upvoted answer 解决了另一个问题。我认为这些案例证明了用例存在,无论人们可能遇到什么原始问题。我只是想帮助别人更容易找到答案。 【参考方案1】:我发现的最短方法 - 使用 when
(似乎不需要 otherwise
子句):
df = df.withColumn('c2', F.when(F.lit(1).isNotNull(), F.lit('a')))
完整测试结果:
from pyspark.sql import SparkSession, functions as F
spark = SparkSession.builder.getOrCreate()
df = spark.createDataFrame([(1,)], ['c1'])
df = df.withColumn('c2', F.when(F.lit(1).isNotNull(), F.lit('a')))
df.show()
# +---+---+
# | c1| c2|
# +---+---+
# | 1| a|
# +---+---+
df.printSchema()
# root
# |-- c1: long (nullable = true)
# |-- c2: string (nullable = true)
【讨论】:
以上是关于在 PySpark 数据框中添加可为空的列的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark 可为空的 uuid 类型 uuid 但表达式的类型为字符变化