UDF函数,用于使用pyspark检查输入数据帧是否有重复列

UDF函数,用于使用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

如果输入数据框中有同名的重复列,则需要返回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.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
提供数据框中的列的列表,如果您想要重复的值,我建议您阅读本文