📅  最后修改于: 2023-12-03 15:33:55.761000             🧑  作者: Mango
在 PySpark 中,可以使用 pivot 和 unpivot 操作来将列转换为长。当我们需要将多列转换为一列时,可以使用 unpivot 操作。反之,当我们需要将一列拆成多列时,可以使用 pivot 操作。
以下是使用 PySpark 执行 unpivot 操作的步骤:
以下是使用 PySpark 执行 pivot 操作的步骤:
from pyspark.sql.functions import split, concat_ws
fixed_cols = ["id", "name"]
unpivot_cols = ["value1", "value2", "value3"]
df = df.select(fixed_cols +
[concat_ws("_", lit(col), lit(col_name)).alias("key"),
col(col_name).alias("value") for col_name in unpivot_cols
for col in [col(col_name)]])
df = df.select(fixed_cols + [split(df.key, "_").getItem(1).alias("key_name"),
split(df.key, "_").getItem(2).alias("key_val"), df.value])
df = df.drop(df.key)
pivoted = df.groupBy("location").pivot("metric").agg(sum("value"))
pivoted = pivoted.select("location", "metric1", "metric2", "metric3")
以上示例代码是简单的示例,实际情况下需要根据数据的类型和结构进行微调。