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 列中的值转换为行,并保留对应的 idname。可以使用 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 列中的数组元素拆分成多行,每个员工的每个部门对应一行,并保留了原始的 idname 列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值