Как добавить большое количество столбцов (5000~1000 столбцов) в исходный кадр данных за меньшее время?

Я хочу провести какой-то стресс-тест на конвейере pyspark, который я создал, и хочу проверить, увеличатся ли столбцы входного фрейма данных (полученного из Hive) до 2x,5x раз, тогда как будет работать конвейер?

Я попытался создать повторяющиеся столбцы числовых столбцов, уже присутствующих в кадре данных, используя цикл for:

for i in range(5000):
    df = df.withcolumn('abc_'+i,df.col1)

Но это занимает много времени. Есть ли какой-то эффективный способ?

1 ответ

Метод withColumn может иметь некоторые накладные расходы, попробуйте использовать functions а также select, такие как:

>>> dup_cols = [F.col('col_1').alias("abc_{}".format(i)) for i in range(1,10)]
>>> df_duplicated = df.select(df.columns + dup_cols)
>>> df.printSchema()
root
 |-- col_1: string (nullable = true)
 |-- date: string (nullable = true)
 |-- value: long (nullable = true)
 |-- id_1: string (nullable = true)
 |-- id_2: string (nullable = true)
 |-- id_3: string (nullable = true)
 |-- id_4: string (nullable = true)
 |-- id_5: string (nullable = true)
 |-- id_6: string (nullable = true)
 |-- id_7: string (nullable = true)
 |-- id_8: string (nullable = true)
 |-- id_9: string (nullable = true)

В любом случае, поскольку этот вид операций лениво оценивается в Spark, я не знаю, сможет ли большое количество дублированных столбцов эффективно проверить фактическое большое количество различных столбцов. Эта разница может быть больше, если исходные данные также сохраняются в столбчато-оптимизированном формате, таком как паркет.

Другие вопросы по тегам