Функция UDF для проверки наличия в моем входном фрейме данных повторяющихся столбцов или без использования pyspark - PullRequest
0 голосов
/ 07 января 2020

Мне нужно вернуть логическое значение 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())

Ответы [ 2 ]

2 голосов
/ 07 января 2020

Вам не нужен UDF, вам просто нужна функция Python. Проверка будет в Python, а не в JVM. Итак, @ Santia go P сказал, что вы можете использовать checkDuplicate ONLY

    def checkDuplicate(df):
        return len(set(df.columns)) == len(df.columns) 
0 голосов
/ 07 января 2020

Предполагается, что вы передаете фрейм данных в функцию.

udf(returnType=BooleanType())
    def checkDuplicate(df):
        return len(set(df.columns)) == len(df.columns)
...