如何将行数据转置/旋转到 Spark Scala 中的列? [复制]

Posted

技术标签:

【中文标题】如何将行数据转置/旋转到 Spark Scala 中的列? [复制]【英文标题】:How to transpose/pivot the rows data to column in Spark Scala? [duplicate] 【发布时间】:2018-06-08 22:06:24 【问题描述】:

我是 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】:

你可以groupbyCompany然后在Type列上使用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|
+-------+-------+----+-------+

您可以稍后重命名该列。

希望这会有所帮助!

【讨论】:

以上是关于如何将行数据转置/旋转到 Spark Scala 中的列? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

将行值转换为列,其值来自 spark scala 中的另一列 [重复]

基于Spark Scala中的条件转置Dataframe中的特定列和行

如何在不使用数据透视的情况下将行转换或转置为 SQL 中的列?

在 Spark SQL (pyspark) 中将行转置为列

如何将行旋转到列(自定义旋转)

如何通过将行旋转到 csv 数据来折叠工作表