在PySpark中,可以使用pivot
函数将列转置为行。pivot
函数用于将DataFrame中的一列作为新的列名,并将另一列的值作为新列的值。以下是在PySpark DataFrame中将列转置为行的步骤:
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, expr
spark = SparkSession.builder.getOrCreate()
data = [("Alice", 25, 100),
("Bob", 30, 200),
("Charlie", 35, 300)]
df = spark.createDataFrame(data, ["Name", "Age", "Salary"])
df.show()
输出:
+-------+---+------+
| Name|Age|Salary|
+-------+---+------+
| Alice| 25| 100|
| Bob| 30| 200|
|Charlie| 35| 300|
+-------+---+------+
pivot
函数将列转置为行:pivoted_df = df.select("Name", expr("stack(2, 'Age', Age, 'Salary', Salary) as (Attribute, Value)")) \
.groupBy("Name") \
.pivot("Attribute") \
.agg(expr("coalesce(first(Value), 0)"))
pivoted_df.show()
输出:
+-------+---+------+
| Name|Age|Salary|
+-------+---+------+
| Alice| 25| 100|
| Bob| 30| 200|
|Charlie| 35| 300|
+-------+---+------+
在上述代码中,我们首先使用select
函数创建一个新的DataFrame,其中包含两列:Name
和Attribute
。Attribute
列使用stack
函数将Age
和Salary
列转换为行,并将其命名为Value
。然后,我们使用groupBy
函数按Name
列分组,并使用pivot
函数将Attribute
列转换为新的列。最后,我们使用agg
函数和coalesce
函数将每个新列的第一个非空值作为最终结果。
这是一个简单的示例,你可以根据实际需求调整代码。关于PySpark的更多信息和示例,请参考腾讯云的PySpark文档。
领取专属 10元无门槛券
手把手带您无忧上云