Pyspark Dataframe 选择少数列上带有别名的所有列

pra*_*ads 4 python apache-spark-sql pyspark

我有一个数据框,其中有很多列(超过 50 列),并且想要选择所有列,因为它们很少通过维护以下顺序重命名列名。我尝试了以下方法,

cols = list(set(df.columns) - {'id','starttime','endtime'})
df.select(col("id").alias("eventid"),col("starttime").alias("eventstarttime"),col("endtime").alias("eventendtime"),*cols,lit(proceessing_time).alias("processingtime"))
Run Code Online (Sandbox Code Playgroud)

并得到错误, SyntaxError: only named arguments may follow *expression

另外,我尝试传递列类型列表,而不是 *cols

df.select(col("id").alias("eventid"),col("starttime").alias("eventstarttime"),col("endtime").alias("eventendtime"),([col(x) for x in cols]),lit(proceessing_time).alias("processingtime"))
Run Code Online (Sandbox Code Playgroud)

这给出了以下错误,

`TypeError: 'Column' object is not callable`
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助。

Sur*_*esh 7

我们可以将列附加在一起并从 df 中选择,

df.select([col("id").alias("eventid"),col("starttime").alias("eventstarttime"),col("endtime").alias("eventendtime")]+cols+[lit(proceessing_time).alias("processingtime")])
Run Code Online (Sandbox Code Playgroud)