使用 Pyspark 替换结构类型列的空值
Replace Nulls of Struct type column using Pyspark
我有一个用例,我想用空值替换 StructType 列中的空值。
以下是您可以用来重新创建场景的示例:
from pyspark.sql.types import StructType, StructField, StringType, IntegerType
data = [(1, [1, "Aman"]), (2, [2, "Raman"]), (3, [3, "Baman"]), (4, None)]
schema = StructType(
[
StructField("ID", IntegerType(), True),
StructField(
"Name",
StructType(
[
StructField("NameID", IntegerType(), True),
StructField("FirstName", StringType(), True),
]
),
True,
),
]
)
df = spark.createDataFrame(data, schema)
df.show()
我想知道如何替换 Name
列中的空值。
使用 when
表达式:
from pyspark.sql import functions as F
df1 = df.withColumn(
"Name",
F.when(
F.col("Name").isNull(),
F.struct(
F.lit(None).alias("NameID"), #replace None by default ID value if needed
F.lit("").alias("FirstName")
)
).otherwise(F.col("Name"))
)
df1.show()
#+---+----------+
#| ID| Name|
#+---+----------+
#| 1| {1, Aman}|
#| 2|{2, Raman}|
#| 3|{3, Baman}|
#| 4| {null, }|
#+---+----------+
这里是 coalesce
的解决方案:
from pyspark.sql import functions as F
df1 = df.withColumn(
"Name",
F.coalesce(
F.col("Name"),
F.struct(
F.lit(None).alias("NameID"),
F.lit("").alias("FirstName"),
),
),
)
我有一个用例,我想用空值替换 StructType 列中的空值。 以下是您可以用来重新创建场景的示例:
from pyspark.sql.types import StructType, StructField, StringType, IntegerType
data = [(1, [1, "Aman"]), (2, [2, "Raman"]), (3, [3, "Baman"]), (4, None)]
schema = StructType(
[
StructField("ID", IntegerType(), True),
StructField(
"Name",
StructType(
[
StructField("NameID", IntegerType(), True),
StructField("FirstName", StringType(), True),
]
),
True,
),
]
)
df = spark.createDataFrame(data, schema)
df.show()
我想知道如何替换 Name
列中的空值。
使用 when
表达式:
from pyspark.sql import functions as F
df1 = df.withColumn(
"Name",
F.when(
F.col("Name").isNull(),
F.struct(
F.lit(None).alias("NameID"), #replace None by default ID value if needed
F.lit("").alias("FirstName")
)
).otherwise(F.col("Name"))
)
df1.show()
#+---+----------+
#| ID| Name|
#+---+----------+
#| 1| {1, Aman}|
#| 2|{2, Raman}|
#| 3|{3, Baman}|
#| 4| {null, }|
#+---+----------+
这里是 coalesce
的解决方案:
from pyspark.sql import functions as F
df1 = df.withColumn(
"Name",
F.coalesce(
F.col("Name"),
F.struct(
F.lit(None).alias("NameID"),
F.lit("").alias("FirstName"),
),
),
)