spark练习 stu 行转列 列转行

复制代码
package com.shujia.spark.sql

import org.apache.spark.sql.{DataFrame, SparkSession}

object Demo8Stu {
  def main(args: Array[String]): Unit = {

    val spark: SparkSession =SparkSession.builder()
      .appName("stu")
      .master("local")
      .getOrCreate()
    val stu: DataFrame =spark.read
      .format("csv")
      .option("sep",",")
      .schema("name String,item String,score Double")
      .load("data/stu.txt")

    stu.createOrReplaceTempView("stu")

    /**
      *
      * 1、行列转换
      * *
      * 表1
      * 姓名,科目,分数
      * name,item,score
      * 张三,数学,33
      * 张三,英语,77
      * 李四,数学,66
      * 李四,英语,78
      *
      * 表2
      * 姓名,数学,英语
      * name,math,english
      * 张三,33,77
      * 李四,66,78
      * *
      * 1、将表1转化成表2
      * 2、将表2转化成表1
      *
      */

    val stu1: DataFrame =spark.sql(
      """
        |
        |select
        |name,
        |sum(case when item = '数学' then score else 0 end) as math ,
        |sum(case when item = '英语' then score else 0 end) as english
        |from
        |stu
        |group by name
        |
        |
      """.stripMargin)
    stu1.show()

    stu1.createOrReplaceTempView("stu2")
    spark.sql(
      """
        |
        |select name,explode(map('数学',math,'英语',english)) as (item,score)  from stu1
        |
      """.stripMargin).show()



  }
}
复制代码

 

posted @   坤坤无敌  阅读(130)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示