我们可以在pyspark中将dataframe作为参数传递给函数吗?



def is_Data_Valid():
emp_df.withColumn(
"ValidationErrors",
f.when(
f.col("Name").rlike("^[a-zA-Z]+$") & f.col("Age").cast("int").isNotNull() & f.col(
"Experience").cast("int").isNotNull() & f.col("Year").cast("int").isNotNull() & f.col(
"Dept").rlike("^[a-zA-Z]+$"),
f.lit("0")
).otherwise(f.lit("Invalid data"))
)

我用上面的函数来验证,但是在这里我只能验证一个数据框架的数据"empdf"但是还有另一个数据框&;emp1f_df&;

所以为了避免重复,我可以把数据帧传递给函数并调用函数两次吗?

您可以将数据帧传递给函数,参见下面的代码。

def is_Data_Valid(df):
df = df.withColumn(
"ValidationErrors",
f.when(
f.col("Name").rlike("^[a-zA-Z]+$") & f.col("Age").cast("int").isNotNull() & f.col(
"Experience").cast("int").isNotNull() & f.col("Year").cast("int").isNotNull() & f.col(
"Dept").rlike("^[a-zA-Z]+$"),
f.lit("0")
).otherwise(f.lit("Invalid data"))
)
return df

你可以通过传递你想要的数据帧来调用这个函数,像这样,

df_1_checked = is_Data_Valid(emp_df)
df_2_checked = is_Data_Valid(emp_1_df)

DataFrame作为参数传入,如下所示:

from pyspark.sql import DataFrame
def is_Data_Valid(df: DataFrame) -> DataFrame:
return df.withColumn(
"ValidationErrors",
f.when(
f.col("Name").rlike("^[a-zA-Z]+$") & f.col("Age").cast("int").isNotNull() & f.col(
"Experience").cast("int").isNotNull() & f.col("Year").cast("int").isNotNull() & f.col(
"Dept").rlike("^[a-zA-Z]+$"),
f.lit("0")
).otherwise(f.lit("Invalid data"))
)

记住总是返回PySpark函数不会就地执行,而是每个DataFrame都是不可变的,因此无论何时执行任何转换,您都必须创建一个新实例。

最新更新