Spark scala 中的枢轴

2024-01-10

我有一个这样的df。

+---+-----+-----+----+
|  M|M_Max|Sales|Rank|
+---+-----+-----+----+
| M1|  100|  200|   1|
| M1|  100|  175|   2|
| M1|  101|  150|   3|
| M1|  100|  125|   4|
| M1|  100|   90|   5|
| M1|  100|   85|   6|
| M2|  200| 1001|   1|
| M2|  200|  500|   2|
| M2|  201|  456|   3|
| M2|  200|  345|   4|
| M2|  200|  231|   5|
| M2|  200|  123|   6|
+---+-----+-----+----+

我正在像这样在这个 df 之上进行枢轴操作。

df.groupBy("M").pivot("Rank").agg(first("Sales")).show
+---+----+---+---+---+---+---+
|  M|   1|  2|  3|  4|  5|  6|
+---+----+---+---+---+---+---+
| M1| 200|175|150|125| 90| 85|
| M2|1001|500|456|345|231|123|
+---+----+---+---+---+---+---+

但我的预期输出如下所示。这意味着我需要在输出中获取列 - Max(M_Max) 。

这里 M_Max 是列的最大值 - M_Max。我的预期输出如下所示。这可以通过 Pivot 函数而不使用 df join 实现吗?

+---+----+---+---+---+---+---+-----+
|  M|   1|  2|  3|  4|  5|  6|M_Max|
+---+----+---+---+---+---+---+-----+
| M1| 200|175|150|125| 90| 85|  101|
| M2|1001|500|456|345|231|123|  201|
+---+----+---+---+---+---+---+-----+

诀窍是应用窗口函数。解决方案如下:

scala> val df = Seq(
     |      | ("M1",100,200,1),
     |      | ("M1",100,175,2),
     |      | ("M1",101,150,3),
     |      | ("M1",100,125,4),
     |      | ("M1",100,90,5),
     |      | ("M1",100,85,6),
     |      | ("M2",200,1001,1),
     |      | ("M2",200,500,2),
     |      | ("M2",200,456,3),
     |      | ("M2",200,345,4),
     |      | ("M2",200,231,5),
     |      | ("M2",201,123,6)
     |      | ).toDF("M","M_Max","Sales","Rank")
df: org.apache.spark.sql.DataFrame = [M: string, M_Max: int ... 2 more fields]

scala> import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.expressions.Window

scala> val w = Window.partitionBy("M")
w: org.apache.spark.sql.expressions.WindowSpec = org.apache.spark.sql.expressions.WindowSpec@49b4e11c

scala> df.withColumn("new", max("M_Max") over (w)).groupBy("M", "new").pivot("Rank").agg(first("Sales")).withColumnRenamed("new", "M_Max").show
+---+-----+----+---+---+---+---+---+
|  M|M_Max|   1|  2|  3|  4|  5|  6|
+---+-----+----+---+---+---+---+---+
| M1|  101| 200|175|150|125| 90| 85|
| M2|  201|1001|500|456|345|231|123|
+---+-----+----+---+---+---+---+---+


scala> df.show
+---+-----+-----+----+
|  M|M_Max|Sales|Rank|
+---+-----+-----+----+
| M1|  100|  200|   1|
| M1|  100|  175|   2|
| M1|  101|  150|   3|
| M1|  100|  125|   4|
| M1|  100|   90|   5|
| M1|  100|   85|   6|
| M2|  200| 1001|   1|
| M2|  200|  500|   2|
| M2|  200|  456|   3|
| M2|  200|  345|   4|
| M2|  200|  231|   5|
| M2|  201|  123|   6|
+---+-----+-----+----+

如果有帮助请告诉我!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark scala 中的枢轴 的相关文章

  • 如何使方法通用而不出现“未找到匹配的形状”

    除了编写大量样板文件之外 我不知道如何克服这个 找不到匹配的形状 错误 要点中说明的基本思想是 我有一个非常基本的方法版本 有效 但非常具体 然后是一个采用mapper参数并且更通用 也可以工作 但特定于一种特定类型 然后是第三个版本 它采
  • Apache Spark 两个 RDD 之间的差异

    假设我有这个示例作业 在带有 Java API 的 Groovy 中 def set1 def set2 0 upto 10 set1 lt lt it 8 upto 20 set2 lt lt it def rdd1 context pa
  • 如何记录来自 Akka (Java) 的所有传入消息

    在 Scala 中 您可以使用 LoggingReceive 包装接收函数 如何通过 Java API 实现相同的目标 def receive LoggingReceive case x do something Scala API 有Lo
  • 在 Windows 7 64 位中删除 Spark 临时目录时出现异常

    我正在尝试在 Windows 7 64 位中运行 Spark 作业的单元测试 我有 HADOOP HOME D winutils winutils path D winutils bin winutils exe 我运行了以下命令 winu
  • Scala 中的条件未来

    给定这两个 future 仅当条件为真时我才需要运行第一个 future 请参阅if y gt 2 但我有一个例外Future filter predicate is not satisfied 这是什么意思以及如何修复该示例 object
  • Java时间转正常格式

    我有 Java 时间1380822000000 我想转换为我可以阅读的内容 import java util Date object Ws1 val a new Date 1380822000000 toString 导致异常 warnin
  • 如何将 Spark DataFrame 以 csv 格式保存在磁盘上?

    例如 这样的结果 df filter project en select title count groupBy title sum 将返回一个数组 如何将 Spark DataFrame 作为 csv 文件保存在磁盘上 Apache Sp
  • 缩放数据框的每一列

    我正在尝试缩放数据框的每一列 首先 我将每一列转换为向量 然后使用 ml MinMax Scaler 除了简单地重复它之外 是否有更好 更优雅的方法将相同的函数应用于每一列 import org apache spark ml linalg
  • SBT Scaladoc 配置

    我正在尝试在 SBT 中配置 Scaladoc 特别是标题 输出目录和类路径 我通过将以下内容添加到 build sbt 来定义标题 scalacOptions in Compile doc Opts doc title Scala Too
  • 我可以使用特征中的方法重写 scala 类方法吗?

    class PasswordCaseClass val password String trait PasswordTrait self PasswordCaseClass gt override def password blue val
  • 将 Scala Future 转变为 CompletableFuture

    我的项目中有一个 Akka 层 它返回Scala Future 而接收 Future 的部分是 Java 风格的 团队中的人不了解 Scala 他们宁愿使用CompletableFuture因为他们更了解 Java 8 API 有没有什么好
  • Spark 对 RDD 中按值排序

    我有一个火花对 RDD 键 计数 如下 Array String Int Array a 1 b 2 c 1 d 3 使用spark scala API如何获取按值排序的新RDD对 所需结果 Array d 3 b 2 a 1 c 1 这应
  • 无法在 NetBeans 7.4rc1 上安装 nb-scala

    我已经安装了 NB 7 4rc1 并从下载了 nb scalahttp sourceforge net projects erlybird files nb scala http sourceforge net projects erlyb
  • 如何在 IntelliJ IDEA 中关闭具有 Unit 返回类型的 Scala 自动完成函数?

    IntelliJ IDEA Scala 插件具有自动添加功能 Unit到单位返回函数的末尾 例如 如果我正在编写一个有副作用的函数foo def foo 当我击中Enter当光标位于大括号之间时 我将得到以下内容 def foo Unit
  • 从apache Spark中的文本文件查找rdd中存储的数据大小

    我是 Apache Spark 版本 1 4 1 的新手 我编写了一段小代码来读取文本文件并将其数据存储在 Rdd 中 有没有一种方法可以获取 rdd 中数据的大小 这是我的代码 import org apache spark SparkC
  • Scala:为什么 Actor 是轻量级的?

    是什么让演员如此轻盈 我什至不确定它们是如何工作的 它们不是单独的线程吗 当他们说轻量级时 他们的意思是每个参与者都没有映射到单个线程 JVM 提供共享内存线程 锁作为主要形式 并发抽象 但分享了 内存线程是相当重量级的 并招致严重的绩效处
  • 如何获取使用 concat_ws 生成的结果的大小?

    我正在表演groupBy在 COL1 上并使用 COL2 的串联列表concat ws 我怎样才能获得该列表中的值的计数 这是我的代码 Dataset
  • Spark 写入 hdfs 无法使用 saveAsNewAPIHadoopFile 方法

    我在 CDH 5 2 0 上使用 Spark 1 1 0 并试图确保我可以读取和写入 hdfs 我很快意识到 textFile 和 saveAsTextFile 调用旧的 api 并且似乎与我们的 hdfs 版本不兼容 def testHD
  • 强制类型差异

    在 Scala 中 我可以在编译时强制执行类型相等 例如 case class Foo A B a A b B implicit ev A B scala gt Foo 1 2 res3 Foo Int Int Foo 1 2 scala
  • Scala UpperBound 和 LowerBound 概念

    下面是我尝试运行的代码 class Student def printDetails println I am a student def printSomeOtherDetails println I love Studying clas

随机推荐

  • 使用核心转储在 Linux 中进行调试

    使用 GDB 调试核心转储时的 最佳实践 是什么 目前 我面临一个问题 我的应用程序的发行版是在没有 g 编译器标志的情况下编译的 我的应用程序的调试版本 使用 g 编译 已存档 以及源代码和发布二进制文件的副本 最近 当用户给我一个核心转
  • 如何将图像保存为变量?

    现在 我有一个带有精灵的 python 游戏 它从其目录中的文件中获取图像 我想让它变得我什至不需要这些文件 不知何故 将图像预先存储在变量中 以便我可以从程序中调用它 而无需额外的 gif 文件的帮助 我使用图像的实际方式是 image
  • 如何在jsp中显示图片?

    我有一个字节数组图像 我需要在 jsp 页面中以 jpg 格式显示该图像 单击该图像时 我可以将图像下载到我的电脑上 我正在从 mysql 数据库将图像加载为字节数组 我的代码是 ResultSet res statement execut
  • SCORM 1.2 API 示例/教程

    我花了相当多的时间搜索 SCORM 1 2 API 教程 示例 结果证明这是一项相当困难的任务 我发现的唯一样本是这样的 http www vsscorm net 2009 05 30 ground rules http www vssco
  • maven-compiler-plugin:jar:3.8.1 丢失

    尝试使用 3 8 1 而不是 3 8 0 但收到消息 警告 org apache maven plugins maven compiler plugin jar 3 8 1 的 POM 丢失 没有可用的依赖信息 我的 pom xml 在 3
  • 如果 File 不存在,如何确定它是否是文件或目录?

    File isFile and File isDirectory 不仅当File不是指定的类型 而且当File其本身不存在于文件系统上 如何判断是否File当文件或目录不存在时代表它 一般来说 一个特定的路径既可以代表一个目录 也可以代表一
  • 使用 Node.JS

    昨晚我转储了 Windows 7 并格式化了我的硬盘驱动程序以移植到基于 Linux 的操作系统 纯粹是因为我想开始使用Node JS 所以我已经安装了Node JS并做了一些测试 http 服务器和套接字等 我想做的是构建一个与 MVC
  • 如何使用 pgAdmin 添加几何列

    我正在使用在 PostgreSQL 中创建的数据库 在其架构中有两个表 我想在其中一个表中添加一个geometry柱子 问题是我创建了 postgis 扩展 CREATE EXTENSION postgis 对于数据库 但我无法使用 pgA
  • MVC AuthenticationManager.SignOut() 未注销

    我的项目基于 Visual Studio 2013 中的 MVC 5 项目模板 个人用户帐户选项 我一直依赖用户的默认登录和注销方法 但我不确定我做了什么 在某些时候 用户无法再注销 但他们可以以其他用户的身份登录 这是帐户控制器的默认注销
  • 是否有一种补充方法来获取鼠标事件之类的东西?

    直接使用 jQuery 如果我有一个固定框 例如 一个彩色矩形 并且将鼠标移入或移出其中 则如果我将鼠标光标以一种或另一种方式移动到框的边界上 jQuery 就会给我事件 如果我有一个以编程方式移动的彩色矩形 例如向右移动 然后我将鼠标放在
  • 无法在模拟器中运行应用程序:运行时遇到错误(域 = LaunchServicesError,代码 = 0)

    在 Xcode 6 中成功编译项目后 我无法在模拟器中运行它并显示上述消息 我做了所有可能的研究 尝试了一切 但仍然没有任何进展 我不使用 swift 也不使用小部件或扩展 因此请不要建议由这些引起的解决方案 如类似问题中所示 如果有人发现
  • Applet 与 Servlet

    JAVA中Applet和Servlet有什么区别 Applet运行在客户端 servlet运行在服务器上 就这么简单 更具体地说 该小程序被下载到客户端 并在浏览器内的 JRE 中执行 并且可以在小程序框架内显示它想要显示的任何内容 相反
  • 屏幕抓取建议:交互式图表

    我最近学习了一些关于如何在 Python 中使用 BeautifulSoup 的教程 并学习了如何简单地从网页中抓取文本和 URL 我现在正在尝试从以下链接中抓取数据 http www study cam ac uk undergradua
  • ClosedXML 添加图像

    我可以使用 OpenXML 将图像添加到 Excel 电子表格中 然而 对于程序的其余部分 我使用 ClosedXML 来添加数据 我可以使用列和行索引在特定单元格添加数据 如果我可以将图像添加到 Excel 它目前似乎是一个单独的层 悬停
  • 解析可选参数和非可选参数

    我是 bash 的新手 在阅读并尝试了很多有关如何解析参数的内容后 我无法做我真正想做的事情 我想解析可选参数和非可选参数 更具体地说 我想解析 3 个参数 第一个 fastaq 文件 第二个 第二个可选 fastaq 文件 第三个参数将是
  • pgAdmin Docker 错误:“用户名或密码不正确”

    有一些简单的 docker compose yml 文件配置 但我不确定为什么我不能使用登录到 pgAdmin 电子邮件受保护 cdn cgi l email protection作为电子邮件和admin作为密码 是否需要更多配置或者我使用
  • PHP函数注释

    我看到一些 PHP 函数在顶部被注释 使用的格式我不知道 Convert an object to an array param object object The object to convert return array 我的 IDE
  • 快速检测用户点击屏幕

    我想删除UIView用户点击除该视图之外的其他内容后从屏幕上显示 为了让您形象化 我将上传我的视图草图 我想去掉蓝色UIView用户点击此视图中除按钮之外的其他内容后 我应该用什么 编辑 穿蓝色衣服UIView有两个按钮 我想在用户点击背景
  • 特质类别如何运作以及它们的作用是什么?

    我正在读斯科特 迈耶斯的书有效的C https rads stackoverflow com amzn click 0321334876 他在谈论特征类 我明白我需要它们在编译时确定对象的类型 但我无法理解他对这些类实际上做什么的解释 从技
  • Spark scala 中的枢轴

    我有一个这样的df M M Max Sales Rank M1 100 200 1 M1 100 175 2 M1 101 150 3 M1 100 125 4 M1 100 90 5 M1 100 85 6 M2 200 1001 1 M