我在Spark中有以下数据框
s s_type o o_type
-----------------
s1 ss1 o1 oo1
s2 ss2 o2 oo2
我想交换列
s s_type o o_type
-----------------
o1 oo1 s1 ss1
o2 oo2 s2 ss2
一种方法是将列[o, o_type]
复制到临时列['o_temp','o_type_temp']
中
然后将[s,s_type]
的值复制到[o,o_type]
,最后将['o_temp','o_type_temp']
复制到[s,s_type]
。
我想知道是否有更好/更有效的方法?
答案 0 :(得分:2)
您可以将select
与pyspark.sql.Column.alias
一起使用:
from pyspark.sql.functions import col
df = df.select(
col("o").alias("s"),
col("o_type").alias("s_type"),
col("s").alias("o"),
col("s_type").alias("o_type")
)
对于更通用的解决方案,您可以创建旧名称到新名称的映射,并在列表理解中对其进行循环:
# key = old column, value = new column
mapping = {
"o": "s",
"o_type": "s_type",
"s": "o",
"s_type": "o_type"
}
df = df.select(*[col(old).alias(new) for old, new in mapping.items()])