在 Pyspark 中有条件地将列添加到数据框
Add column to Data Frame conditionally in Pyspark
我在 PySpark 中有一个数据框。我想有条件地向数据框添加一列。
假设如果数据框没有该列,则添加一个具有 null
值的列。
如果该列存在,则什么也不做,return 与新数据框相同的数据框
如何在 PySpark 中传递条件语句
这并不难,但您需要的不仅仅是列名才能正确完成。需要导入
from pyspark.sql import types as t
from pyspark.sql.functions import lit
from pyspark.sql import DataFrame
示例数据:
df = sc.parallelize([("a", 1, [1, 2, 3])]).toDF(["x", "y", "z"])
辅助函数(用于遗留 Python 版本条带类型注释):
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)))
用法示例:
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>]
add_if_not_present(df, "foobar",
t.StructType([
t.StructField("foo", t.IntegerType()),
t.StructField("bar", t.IntegerType())]))
DataFrame[x: string, y: bigint, z: array<bigint>, foobar: struct<foo:int,bar:int>]
我在 PySpark 中有一个数据框。我想有条件地向数据框添加一列。
假设如果数据框没有该列,则添加一个具有 null
值的列。
如果该列存在,则什么也不做,return 与新数据框相同的数据框
如何在 PySpark 中传递条件语句
这并不难,但您需要的不仅仅是列名才能正确完成。需要导入
from pyspark.sql import types as t
from pyspark.sql.functions import lit
from pyspark.sql import DataFrame
示例数据:
df = sc.parallelize([("a", 1, [1, 2, 3])]).toDF(["x", "y", "z"])
辅助函数(用于遗留 Python 版本条带类型注释):
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)))
用法示例:
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>]
add_if_not_present(df, "foobar",
t.StructType([
t.StructField("foo", t.IntegerType()),
t.StructField("bar", t.IntegerType())]))
DataFrame[x: string, y: bigint, z: array<bigint>, foobar: struct<foo:int,bar:int>]