Как добавить большое количество столбцов (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, я не знаю, сможет ли большое количество дублированных столбцов эффективно проверить фактическое большое количество различных столбцов. Эта разница может быть больше, если исходные данные также сохраняются в столбчато-оптимизированном формате, таком как паркет.