0


spark中怎么实现行列转换

一、sparksql 行转列:

在 Spark SQL 中,你可以使用

pivot

函数将行转换为列。

pivot

函数可以帮助你重新排列数据,将某些行值作为列,并根据指定的聚合函数对这些值进行汇总。以下是一个示例:

假设你有一个包含以下数据的表

sales_data

| date       | product | amount |
|------------|---------|--------|
| 2023-01-01 | A       | 100    |
| 2023-01-01 | B       | 200    |
| 2023-01-02 | A       | 150    |
| 2023-01-02 | B       | 250    |

现在,你想将

product

列中的值转换为列,可以按照

date

进行分组,并且对应每个日期的

product

下的

amount

进行求和。可以使用

pivot

函数实现这个目标:

val df = spark.read // 从数据源加载数据或创建 DataFrame
// 例如:val df = spark.read.format("csv").load("path_to_your_data.csv")

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

val pivotedDF = df.groupBy("date")
  .pivot("product")
  .agg(sum("amount"))

pivotedDF.show()

这将产生类似以下的输出:

| date       | A_sum | B_sum |
|------------|-------|-------|
| 2023-01-01 | 100   | 200   |
| 2023-01-02 | 150   | 250   |

在这个例子中,

pivot

函数将

product

列的值(A 和 B)转换为两列,并对每个日期的

amount

进行了求和。

二、sparksql 列转行

在 Spark SQL 中,你可以使用

explode

函数将列转换为行。

explode

函数可用于将包含数组的列拆分成多行,每个数组元素对应一行数据。以下是一个示例:

假设你有一个包含以下数据的表

employee_data

| id  | name    | departments    |
|-----|---------|----------------|
| 1   | Alice   | [Sales, HR]    |
| 2   | Bob     | [Engineering]  |
| 3   | Charlie | [Marketing]    |

现在,你想将

departments

列中的值转换为行,并保留对应的

id

name

。可以使用

explode

函数实现这个目标:

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

val df = spark.read // 从数据源加载数据或创建 DataFrame
// 例如:val df = spark.read.format("csv").load("path_to_your_data.csv")

val explodedDF = df.withColumn("department", explode(col("departments")))
  .select("id", "name", "department")

explodedDF.show()

这将产生类似以下的输出:

| id  | name    | department  |
|-----|---------|-------------|
| 1   | Alice   | Sales       |
| 1   | Alice   | HR          |
| 2   | Bob     | Engineering |
| 3   | Charlie | Marketing   |

在这个例子中,

explode

函数将

departments

列中的数组元素拆分成多行,每个员工的每个部门对应一行,并保留了原始的

id

name

列。


本文转载自: https://blog.csdn.net/weixin_38290062/article/details/135127842
版权归原作者 强哥玩转大数据 所有, 如有侵权,请联系我们删除。

“spark中怎么实现行列转换”的评论:

还没有评论