Es ist nicht schwer, aber Sie werden ein bisschen mehr brauchen als ein Spaltenname, um es richtig zu machen. Erforderlich Importe
from pyspark.sql import types as t
from pyspark.sql.functions import lit
from pyspark.sql import DataFrame
Beispiel Daten:
df = sc.parallelize([("a", 1, [1, 2, 3])]).toDF(["x", "y", "z"])
eine Hilfsfunktion (für die Verwendung mit älteren Python Versionen abzustreifen Typenannotationen):
def add_if_not_present(df: DataFrame, name: str, dtype: t.DataType) -> DataFrame:
return (df if name in df.columns
else df.withColumn(name, lit(None).cast(dtype)))
Verwendungsbeispiel:
add_if_not_present(df, "foo", t.IntegerType())
DataFrame[x: string, y: bigint, z: array<bigint>, foo: int]
add_if_not_present(df, "x", t.IntegerType())
DataFrame[x: string, y: bigint, z: array<bigint>]
DataFrame[x: string, y: bigint, z: array<bigint>, foobar: struct<foo:int,bar:int>]