在 Scala Spark 中加入不同 Dataframe 时动态选择多个列

2023-12-28

我有两个 Spark 数据框df1 and df2。有没有办法在连接这两个数据帧时动态选择输出列?以下定义在内部联接的情况下输出 df1 和 df2 中的所有列。

def joinDF (df1: DataFrame,  df2: DataFrame , joinExprs: Column, joinType: String): DataFrame = {   
  val dfJoinResult = df1.join(df2, joinExprs, joinType)
  dfJoinResult
  //.select()
}

输入数据:

val df1 = List(("1","new","current"), ("2","closed","saving"), ("3","blocked","credit")).toDF("id","type","account")
val df2 = List(("1","7"), ("2","5"), ("5","8")).toDF("id","value")

预期结果:

val dfJoinResult = df1
  .join(df2, df1("id") === df2("id"), "inner")
  .select(df1("type"), df1("account"), df2("value")) 

dfJoinResult.schema():

StructType(StructField(type,StringType,true), 
StructField(account,StringType,true), 
StructField(value,StringType,true))

我看过类似的选项df.select(cols.head, cols.tail: _*)但它不允许从两个 DF 中选择列。 有没有办法通过selectExpr动态列以及我们想要从中选择的数据框详细信息def?我正在使用 Spark 2.2.0。


可以通过select表达式为Seq[Column]到方法:

def joinDF(df1: DataFrame,  df2: DataFrame , joinExpr: Column, joinType: String, selectExpr: Seq[Column]): DataFrame = {   
  val dfJoinResult = df1.join(df2, joinExpr, joinType)
  dfJoinResult.select(selectExpr:_*)
}

要调用该方法,请使用:

val joinExpr = df1.col("id") === df2.col("id")
val selectExpr = Seq(df1.col("type"), df1.col("account"), df2.col("value"))

val testDf = joinDF(df1, df2, joinExpr, "inner", selectExpr)

这将给出所需的结果:

+------+-------+-----+
|  type|account|value|
+------+-------+-----+
|   new|current|    7|
|closed| saving|    5|
+------+-------+-----+

In the selectExpr上面,有必要指定列来自哪个数据帧。然而,这可以是如果以下假设成立,则进一步简化:

  1. 列到join在两个数据框中具有相同的名称
  2. 要选择的列具有唯一的名称(其他数据框没有同名的列)

在这种情况下,joinExpr: Column可以改为joinExpr: Seq[String] and selectExpr: Seq[Column] to selectExpr: Seq[String]:

def joinDF(df1: DataFrame,  df2: DataFrame , joinExpr: Seq[String], joinType: String, selectExpr: Seq[String]): DataFrame = {   
  val dfJoinResult = df1.join(df2, joinExpr, joinType)
  dfJoinResult.select(selectExpr.head, selectExpr.tail:_*)
}

现在调用该方法看起来更干净:

val joinExpr = Seq("id")
val selectExpr = Seq("type", "account", "value")

val testDf = joinDF(df1, df2, joinExpr, "inner", selectExpr)

Note: 当。。。的时候join是使用执行Seq[String]与使用表达式相比,生成的数据帧的列名称将有所不同。当存在同名列时,之后将无法单独选择这些列。

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

在 Scala Spark 中加入不同 Dataframe 时动态选择多个列 的相关文章

  • 如何在 apache Spark 作业中执行阻塞 IO?

    如果当我遍历 RDD 时 我需要通过调用外部 阻塞 服务来计算数据集中的值怎么办 您认为如何才能实现这一目标 值 Future RDD Double Future sequence tasks 我尝试创建一个 Futures 列表 但由于
  • 将 yaml 中的列表映射到 Scala 中的对象列表(Spring Boot)

    背景 我已经阅读了很多关于如何使用的示例ConfigurationProperties从配置中读取列表 见下文 https github com konrad garus so yaml https github com konrad ga
  • 向 Scala Swing Panel 添加标签时出现类型不匹配错误

    我有这个课程扩展FlowPanel我正在尝试向其中添加标签 import java awt Label Color import scala swing import scala util Random class MyPanel exte
  • 将 JSON URL 转换为 R 数据帧

    我在将 JSON 文件 从 API 转换为 R 中的数据帧时遇到问题 例如 URL 我尝试了 S O 的一些不同建议 包括将json数据转换为R中的数据框 https stackoverflow com questions 28683769
  • 如何定义与更高类型类型(类型构造函数)绑定的上下文

    我尝试过以下方法 def test Option T Ordering value1 Option T value2 Option T val e implicitly Ordering Option T compare value1 va
  • 按名称获取多个 pandas 列的索引

    我想获取选定的 pandas 数据框列的数字索引 对于一列来说 这非常简单 nonzero df columns values conditionA 但有多个元素 我有一些有用的东西 但很冗长和巨大 df pd DataFrame colu
  • 使用 Scala 进行网页抓取 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从所有数据帧列中删除子字符串

    我有一个单词列表 大约 1000 个单词 我称之为负面单词 CAST ARTICLES SANITARY JAN CLAUSES SPECIAL ENDORSEMENT 我很快就会用这个单词列表制作一个数据框 我还有一个数据框 看起来像 F
  • 如何在SparkR中进行map和reduce

    如何使用 SparkR 进行映射和归约操作 我能找到的只是有关 SQL 查询的内容 有没有办法使用 SQL 进行映射和减少 See 写入从 SparkR map 返回的 R 数据帧 https stackoverflow com quest
  • 如何在 Pandas Python 中按 id 对行进行排名

    我有一个像这样的数据框 id points1 points2 1 44 53 1 76 34 1 63 66 2 23 34 2 44 56 我想要这样的输出 id points1 points2 points1 rank points2
  • pandas groupby 操作缺少数据

    在 pandas 数据框中 我有一列如下所示 0 M 1 E 2 L 3 M 1 4 M 2 5 M 3 6 E 1 7 E 2 8 E 3 9 E 4 10 L 1 11 L 2 12 M 1 a 13 M 1 b 14 M 1 c 15
  • 是否有适用于 Haskell 或 Scala 等函数式语言的 LL 解析器生成器?

    我注意到明显缺乏用函数式语言创建解析器的 LL 解析器 我一直在寻找但没有成功的理想发现是为 ANTLR 风格的 LL 语法生成 Haskell 解析器 语法的模小数重新格式化 并且令我惊讶的是 每个最后一个解析器生成器都具有函数我发现的语
  • 关于 scala.math.Integral 的问题

    有什么方法mkNumericOps andmkOrderingOps of scala math Integral http www scala lang org api current scala math Integral html我们
  • 到底什么是单例类型?

    什么是单例类型 有什么应用和影响 我们非常欢迎示例 更欢迎外行术语 如果将类型视为一组值 则值的单例类型x是仅包含该值的类型 x 用法示例 模式匹配 case Foo type检查匹配的对象是否与Foo using eq where cas
  • Shapeless 和 gremlin scala:如何返回调用 `as` 的结果?

    所以 我调用这个函数as from gremlin scala case class GremlinScala End Labels lt HList traversal GraphTraversal End def as name Str
  • 如何并行运行多个Spark作业?

    一个 Spark 有一个 Oracle 查询 所以我必须并行运行多个作业 以便所有查询同时触发 如何并行运行多个作业 引用官方文档作业调度 http spark apache org docs latest job scheduling h
  • Scala sbt 项目给出 NullPointerException?

    当我运行命令时sbt clean compile run在我的 sbt 项目中 它给出了空指针异常 这是控制台输出 info Loading project definition from home dnilesh workspace wi
  • 配置Scala工作表的工作目录

    我希望 Scala 工作表 和 Scala 解释器 的工作目录是 Eclipse 项目路径而不是 Eclipse 安装目录 我怎样才能 非编程方式 实现这一目标 我知道我可以使用System setProperty user dir 但恕我
  • 将字符串转换为枚举值的 Scala 安全方法

    假设我有枚举 object WeekDay extends Enumeration type WeekDay Value val Mon Tue Wed Thu Fri Sat Sun Value 我希望能够将 String 转换为 Wee
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df

随机推荐

  • Code First:Fluent api 会影响 UI 吗?

    我正在读 Julie Lerman 写的一本关于 Code First 的书 根据这本书 注释和 Fluent api 给出相同的结果 一切都取决于开发人员的风格 我知道注释允许配置代码如何首先生成数据库对象以及 MVC 如何自定义 UI
  • 点击事件后关闭汉堡菜单

    我有一个汉堡菜单 几乎完整 只有 1 个我无法弄清楚的错误 问题 我的导航链接到主页上的不同区域 因此 在主页上 用户可以单击导航链接 这将立即将他们带到页面上的所需位置 我的问题是因为没有加载 所以一旦用户单击导航链接 他们就会被带到该位
  • 使用 secure_random 在 rspec 中存根随机值

    我正在尝试为我的 gem 编写规范 它生成 otp 并将其保存在数据库中 现在我正在为其编写规格 所以基本上我有三种方法generate otp regenerate otp verify otp otp what generate otp
  • angular2 TypeError:无法设置未定义的属性“名称”

    我有一个 Angular2 项目 在 Mac OS 上创建并运行 但是当我在Windows上git它时 它无法运行 在 Chrome 中 我收到此错误 core umd js 3491 EXCEPTION Uncaught in promi
  • 使用 fillcolor 节点增强 BGL write_graphviz make_label_writer

    我想用自定义颜色填充某些节点的颜色 那么图形的顶点属性中是否有自定义属性设置或重新实现自定义函子 make edges writer include
  • Kubernetes 部署和初始化容器

    I 最近学到的 https stackoverflow com questions 44233242 kubernetes cluster and phoenix automate mix ecto migrate 44233465 442
  • ContentPlaceHolders:重复内容

    Scenario 我有一个使用 asp net 母版页的应用程序 我想在其中重复页面顶部和底部的一些内容 目前我使用这样的东西 Master Page
  • 针对安全的 AWS ElasticSearch 进行搜索

    我在 AWS 上设置了一个新的 ElasticSearch 集群 该集群仅允许特定 IAM 用户访问 然而 我尝试从 Ruby 连接到此 并考虑使用 AWS SDK 但它没有实际对 ES 集群进行 HTTP 操作的方法 只能访问配置 API
  • 使用 SOQL 查询 Salesforce 对象列名称

    我在 Salesforce 实例和 S3 存储桶之间的 SnapLogic 集成中使用 Salesforce SOQL 管理单元 我尝试在 Salesforce SOQL 快照字段 SOQL 查询 中使用 SOQL 查询来返回对象的列名称
  • 具有整数值的 NSDictionary

    我正在开发一款与怪物有关的游戏 每个都有一个统计数据列表 这些统计数据都是整数 我可以将每个统计数据设置为它自己的变量 但我更愿意将它们保存在 NSDictionary 中 因为它们都是相关的 当我尝试更改每个统计数据的值时遇到问题 我拥有
  • 正则表达式查找字符串中的一系列大写单词

    text This is a TEXT CONTAINING UPPER CASE WORDS and lower case words This is a SECOND SENTENCE pattern A Z A Z A Z s re
  • 访问 ListView 编辑命令上的控件

    In my ListView我有一个ItemTemplate and EditItemTemplate分别看起来像这样 gt 当我单击 编辑 按钮时 它切换到EditItemTemplate查看右侧 我想预填充Textbox并选择对应的op
  • 生成 JSONObject 字符串键

    我有现有的代码使用org json JSONObject的迭代器 JSONObject obj new JSONObject obj put key1 value1 obj put key2 value2 Iterator keys obj
  • XSLT 转换未提供正确的输出

    我的 XSLT 转换遇到了一些小问题 我有以下 XSLT
  • 如何在玻璃上获得可读的文本(wpf)

    这是两个屏幕截图 白色背景上的全玻璃窗 http trotsenko com ua stackoverflow 2010 01 13 20Glass 20Window 20over 20a 20white 20background png
  • openAi-gym 名称错误

    我正在尝试在 WSL 上使用 OpenAI 著名的 Gym 模块并在 python 3 5 2 上执行代码 当我尝试运行环境时正如这里所解释的 https gym openai com docs 使用代码 import gym env gy
  • 是什么导致了这个“关闭句柄延迟读取”错误?

    我刚刚从最新的源安装了 GHC 现在我的程序给了我一条关于 关闭句柄延迟读取 的错误消息 这是什么意思 基本的惰性 I O 原语 hGetContents 产生一个String惰性地 它只根据需要从句柄中读取 以生成程序实际需要的字符串部分
  • 使用 Jquery 过滤表行

    我发现一个 Jquery 脚本可以根据输入字段进行表过滤 该脚本基本上采用过滤器 分割每个单词并使用每个单词过滤表行 因此 最后您将得到一个包含输入字段中所有单词的行列表 http www marceble com 2010 02 simp
  • Boost Graph Library - 有向图的最小生成树

    我有一个问题 要求我在 Boost Graph Library 中找到有向图的最小生成树 我的第一次尝试是使用深度优先搜索和 DFS 访问者 我的计划是忽略除树边回调之外的所有边 这是行不通的 我用下面的例子来说明原因 我的问题是我是否可以
  • 在 Scala Spark 中加入不同 Dataframe 时动态选择多个列

    我有两个 Spark 数据框df1 and df2 有没有办法在连接这两个数据帧时动态选择输出列 以下定义在内部联接的情况下输出 df1 和 df2 中的所有列 def joinDF df1 DataFrame df2 DataFrame