【问题标题】:Converting Values to Columns in Spark Dataset (Convert Key & Value pair of columns to regular columns) [duplicate]将值转换为 Spark 数据集中的列(将列的键和值对转换为常规列)[重复]
【发布时间】:2018-11-16 06:09:36
【问题描述】:

我有一个具有以下简单架构的 Dataframe (Java)。这是一个示例:

+-------------------+
| id | key | Value  |
+-------------------+
| 01 | A   | John   |
| 01 | B   | Nick   |
| 02 | A   | Mary   |
| 02 | B   | Kathy  |
| 02 | C   | Sabrina|
| 03 | B   | George |
+-------------------+

我想将其转换为以下内容:

+------------------------------+
| id | A    | B      | C       |
+------------------------------+
| 01 | John | Nick   | null    |
| 02 | Mary | Kathy  | Sabrina |
| 03 | null | George | null    |
+------------------------------+

我尝试了枢轴运算符(因为它实际上是这样)但部分工作是因为一旦值 A B 和 C 成为列,列的内容只能是数字。

Dataset<Row> pivotTest2 = pivotTest.groupBy(col("id")).pivot("key").count();

我真正想要的是代替计数,将列 Value 的值,即.select(col("Value")),甚至.max("Value") 形式的东西都可以正常工作,但我不能因为@ 987654326@ 不是算术列。

【问题讨论】:

  • 你需要first 而不是maxcount

标签: java apache-spark apache-spark-sql pivot apache-spark-dataset


【解决方案1】:

执行以下操作应该对您有用

import static org.apache.spark.sql.functions.*;

Dataset<Row> pivotTest2 = pivotTest.groupBy(col("id")).pivot("key").agg(first("Value"));
pivotTest2.show(false);

这应该给你

+---+----+------+-------+
|id |A   |B     |C      |
+---+----+------+-------+
|01 |John|Nick  |null   |
|03 |null|George|null   |
|02 |Mary|Kathy |Sabrina|
+---+----+------+-------+

【讨论】:

    猜你喜欢
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2012-11-24
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多