UDF函数,用于使用pyspark检查输入数据帧是否有重复列
如果输入数据框中有同名的重复列,则需要返回boolean false。我写了下面的代码。它标识输入数据帧中的重复列,并将重复列作为列表返回。但当我调用此函数时,它必须返回布尔值,即,如果输入数据帧有同名的重复列,它必须返回flaseUDF函数,用于使用pyspark检查输入数据帧是否有重复列,pyspark,pyspark-dataframes,Pyspark,Pyspark Dataframes,如果输入数据框中有同名的重复列,则需要返回boolean false。我写了下面的代码。它标识输入数据帧中的重复列,并将重复列作为列表返回。但当我调用此函数时,它必须返回布尔值,即,如果输入数据帧有同名的重复列,它必须返回flase @udf('string') def get_duplicates_cols(df, df_cols): duplicate_col_index = list(set([df_cols.index(c) for c in df_cols if df_cols
@udf('string')
def get_duplicates_cols(df, df_cols):
duplicate_col_index = list(set([df_cols.index(c) for c in df_cols if df_cols.count(c) == 2]))
for i in duplicate_col_index:
df_cols[i] = df_cols[i] + '_duplicated'
df2 = df.toDF(*df_cols)
cols_to_remove = [c for c in df_cols if '_duplicated' in c]
return cols_to_remove
duplicate_cols = udf(get_duplicates_cols,BooleanType())
假设您将数据帧传递给函数
udf(returnType=BooleanType())
def checkDuplicate(df):
return len(set(df.columns)) == len(df.columns)
假设您将数据帧传递给函数
udf(returnType=BooleanType())
def checkDuplicate(df):
return len(set(df.columns)) == len(df.columns)
您不需要任何UDF,只需要一个Python函数。检查将在Python中进行,而不是在JVM中。因此,正如@Santiago P所说,您只能使用checkDuplicate
def checkDuplicate(df):
return len(set(df.columns)) == len(df.columns)
您不需要任何UDF,只需要一个Python函数。检查将在Python中进行,而不是在JVM中。因此,正如@Santiago P所说,您只能使用checkDuplicate
def checkDuplicate(df):
return len(set(df.columns)) == len(df.columns)
为什么要使用udf?也可以在没有自定义项的情况下完成。为什么要使用自定义项?也可以在没有自定义项的情况下完成。它不会返回任何值。如果我的输入数据框包含任何重复的列,则必须返回false。此解决方案提供您所需的信息,
false
如果存在重复的列,则返回false;如果没有重复的列,则返回True。我认为你在混淆视听。在代码中,您试图返回重复列的名称列表(ArrayType(StringType()
)。您不能根据结果返回不同的类型(在udf中).df.columns
为您提供数据框中列的列表,如果您想要重复的值,我建议您阅读此内容,它不会返回任何值。如果我的输入数据框包含任何重复的列,则必须返回false。此解决方案为您提供所需信息,false
如果存在重复项,True
如果没有重复的列。我认为您是在混合东西。在代码中,您试图返回重复列的名称列表(ArrayType(StringType()
)。您不能根据结果返回不同的类型(在udf中).df.columns
提供数据框中的列的列表,如果您想要重复的值,我建议您阅读本文