Код PySpark очень медленный при использовании в функциях Python - PullRequest
0 голосов
/ 22 сентября 2018

Я использую функции python для абстрагирования функциональных возможностей и передачи данных в качестве аргументов этим функциям, где это применимо, который выполняет некоторые вычисления и возвращает новый / обновленный кадр данных обратно.

def calculate(df):
    df_new = df.select('col1', 'col2')
    df_new = df.withColumn('error', when(col(col1)!= col(col2), 1).otherwise(0))
    return df_new

def get_meta(df):
    df_meta = df.agg(sum('error').alias('error_count')).select('error_count')
    return df_meta

df = spark.read.csv('/path/to/csv')
df = df.select('col1','col2')
output_df = calculate(df)
df_meta = get_meta(output_df)

df_meta.show()

Проблема, с которой я сталкиваюсьЭто занимает слишком много времени для меня, чтобы получить желаемый результат только с 30 000 записей.Иногда я заканчиваю тем, что убиваю процесс.Но когда я не использую функции, это займет меньше 2 минут, чтобы получить тот же результат.Я не уверен, почему spark ведет себя по-разному, когда кадры данных содержатся внутри функций (очевидно, это не UDF, о которых мы говорим).Любое понимание этого поможет.

...