Pyspark 如何在非常短的时间内向初始数据帧添加大量列(5000~1000列)?

Pyspark 如何在非常短的时间内向初始数据帧添加大量列(5000~1000列)?,pyspark,pyspark-sql,pyspark-dataframes,Pyspark,Pyspark Sql,Pyspark Dataframes,我想对我创建的pyspark管道进行某种压力测试,并想测试从Hive检索的输入DataFrame的列是否增加到2倍、5倍,那么管道将如何工作 我已尝试使用for循环创建dataframe中已经存在的数字列的重复列: for i in range(5000): df = df.withcolumn('abc_'+i,df.col1) 但这需要很多时间。 是否有一些有效的方法?withColumn方法可能会有一些开销,请尝试使用函数并选择,例如: >>> dup_cols

我想对我创建的pyspark管道进行某种压力测试,并想测试从Hive检索的输入DataFrame的列是否增加到2倍、5倍,那么管道将如何工作

我已尝试使用for循环创建dataframe中已经存在的数字列的重复列:

for i in range(5000):
    df = df.withcolumn('abc_'+i,df.col1)
但这需要很多时间。
是否有一些有效的方法?

withColumn方法可能会有一些开销,请尝试使用函数并选择,例如:

>>> 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中惰性地进行评估的,我不知道大量重复的列是否能够有效地针对实际大量的不同列进行测试。如果原始数据也以柱状优化格式(如拼花地板)保存,这种差异可能会更大。

我认为foldLeft比WithColumn更重要,但我仍然没有时间测试差异,但我认为这取决于数据集。遗憾的是,我仍然没有时间和知识来深入研究这个问题:-但你提供了一个答案。如果你是我的医生,我会担心的。对不起,没时间开玩笑了。我亲身经历并阅读了关于withColumn方法的一些问题,所以我建议尝试使用直接选择方法。如果您有时间,请测试和基准自己不同的方法,并分享结果,谢谢。