Pyspark如何通过两列信息交叉生成指定结构的目标表?
Pyspark实现需求方案
不需要手动遍历每一行,直接用Pyspark内置的pivot透视函数即可实现需求。
你的需求本质是按第二列的数字为对齐键,将第一列的A、B分组值转换为列,对应取第三列的信息值,无匹配的位置自动填充null,正好是透视操作的典型使用场景。
代码示例
1. 构造测试用DataFrame
我们先给原始DataFrame的三列命名为group_key、seq_id、info_val方便演示:
from pyspark.sql import SparkSession from pyspark.sql.functions import first spark = SparkSession.builder.appName("pivot_demo").getOrCreate() data = [ ("A", 1, "info_A1"), ("A", 2, "info_A2"), ("B", 2, "info_B2"), ("B", 3, "info_B3") ] df = spark.createDataFrame(data, schema=["group_key", "seq_id", "info_val"])
2. 执行透视操作
result_df = df.groupBy("seq_id") \ # 可直接传入枚举值列表.pivot("group_key", ["A", "B"])提升运行效率 .pivot("group_key") \ .agg(first("info_val")) \ .orderBy("seq_id") \ .drop("seq_id") # 删掉序号列,和预期输出结构对齐
3. 输出结果
执行result_df.show()即可得到目标结果:
+-------+-------+ | A| B| +-------+-------+ |info_A1| null| |info_A2|info_B2| | null|info_B3| +-------+-------+
如果需要调整列名,调用withColumnRenamed方法修改即可。
内容的提问来源于stack exchange,提问作者Victória Cogo
相关产品推荐
相关产品推荐

