Python 在Pyspark中有条件地向数据帧添加列

Python 在Pyspark中有条件地向数据帧添加列,python,apache-spark,dataframe,pyspark,multiple-columns,Python,Apache Spark,Dataframe,Pyspark,Multiple Columns,我在PySpark中有一个数据帧。我想有条件地向数据框添加一列 假设数据帧没有该列,则添加一个具有null值的列。 如果列存在,则不执行任何操作,并返回与新数据帧相同的数据帧 如何在PySpark中传递条件语句并不难,但要正确传递条件语句,需要的不仅仅是列名。所需进口 从pyspark.sql导入类型为t 从pyspark.sql.functions导入 从pyspark.sql导入数据帧 示例数据: df=sc.parallelize([(“a”,1,[1,2,3]))).toDF([“x”

我在PySpark中有一个数据帧。我想有条件地向数据框添加一列

假设数据帧没有该列,则添加一个具有
null
值的列。 如果列存在,则不执行任何操作,并返回与新数据帧相同的数据帧


如何在PySpark中传递条件语句并不难,但要正确传递条件语句,需要的不仅仅是列名。所需进口

从pyspark.sql导入类型为t
从pyspark.sql.functions导入
从pyspark.sql导入数据帧
示例数据:

df=sc.parallelize([(“a”,1,[1,2,3]))).toDF([“x”,“y”,“z]”)
辅助函数(用于旧式Python版本的条带类型注释):

def添加(如果不存在)(df:DataFrame,name:str,dtype:t.DataType)->DataFrame:
返回(如果名称在df.columns中
else df.withColumn(名称,lit(None).cast(dtype)))
用法示例:

如果不存在则添加(df,“foo”,t.IntegerType())
DataFrame[x:string,y:bigint,z:array,foo:int]
如果不存在则添加(df,“x”,t.IntegerType())
DataFrame[x:string,y:bigint,z:array]
如果不存在则添加(df,“foobar”,
t、 结构类型([
t、 StructField(“foo”,t.IntegerType()),
t、 StructField(“bar”,t.IntegerType())])
DataFrame[x:string,y:bigint,z:array,foobar:struct]