如何在Spark Scala中将行数据转置/透视为列?

7

我是Spark-SQL的新手。我有像这样的Spark Dataframe信息:

Company Type Status
A       X    done
A       Y    done
A       Z    done
C       X    done
C       Y    done
B       Y    done

我希望能够像以下这样显示:

我想要被展示成这样

Company X-type Y-type Z-type
A       done    done    done
B       pending done    pending
C       done    done    pending

我无法在Spark-SQL中实现这个目标,请帮忙。
1个回答

12

您可以按照公司进行groupby,然后在列类型上使用pivot函数。

以下是一个简单的示例。

import org.apache.spark.sql.functions._

val df = spark.sparkContext.parallelize(Seq(
        ("A", "X", "done"),
        ("A", "Y", "done"),
        ("A", "Z", "done"),
        ("C", "X", "done"),
        ("C", "Y", "done"),
        ("B", "Y", "done")
      )).toDF("Company", "Type", "Status")

val result = df.groupBy("Company")
    .pivot("Type")
    .agg(expr("coalesce(first(Status), \"pending\")"))

result.show()

输出:

+-------+-------+----+-------+
|Company|      X|   Y|      Z|
+-------+-------+----+-------+
|      B|pending|done|pending|
|      C|   done|done|pending|
|      A|   done|done|   done|
+-------+-------+----+-------+

您可以稍后重新命名该列。

希望这能帮到您!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接