首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Scala中连接两个数据帧,并通过索引从数据帧中选择一些列?

如何在Scala中连接两个数据帧,并通过索引从数据帧中选择一些列?
EN

Stack Overflow用户
提问于 2017-05-09 00:31:40
回答 2查看 4.1K关注 0票数 1

我必须连接两个数据帧,这非常类似于这里给出的任务Joining two DataFrames in Spark SQL and selecting columns of only one

但是,我只想从df2中选择第二列。在我的任务中,我将在一个数据帧列表的reduce函数中使用两个数据帧的连接函数。在这个数据帧列表中,列名将不同。但是,在每种情况下,我都希望保留df2的第二列。

我在任何地方都找不到如何根据数据帧的编号索引选择数据帧的列。如有任何帮助,我们不胜感激!

编辑:

回答

我想出了解决方案。以下是一种方法:

代码语言:javascript
运行
AI代码解释
复制
def joinDFs(df1: DataFrame, df2: DataFrame): DataFrame = {
  val df2cols = df2.columns
  val desiredDf2Col = df2cols(1)  // the second column
  val df3 = df1.as("df1").join(df2.as("df2"), $"df1.time" === $"df2.time")
      .select($"df1.*",$"df2.$desiredDf2Col")
  df3
}

然后,我可以在数据帧列表上的reduce操作中应用此函数。

代码语言:javascript
运行
AI代码解释
复制
var listOfDFs: List[DataFrame] = List()
// Populate listOfDFs as you want here
val joinedDF = listOfDFs.reduceLeft((x, y) => {joinDFs(x, y)})
EN

回答 2

Stack Overflow用户

发布于 2017-05-09 01:36:07

要选择数据帧中的第二列,您可以简单地执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
val df3 = df2.select(df2.columns(1))

这将首先找到第二个列名,然后选择它。

票数 1
EN

Stack Overflow用户

发布于 2017-05-09 02:01:55

如果要在reduce函数中定义的joinselect方法类似于Joining two DataFrames in Spark SQL and selecting columns of only one

然后,您应该执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
import org.apache.spark.sql.functions._
d1.as("d1").join(d2.as("d2"), $"d1.id" === $"d2.id").select(Seq(1) map d2.columns map col: _*)

您必须记住,第二列的名称(即 Seq(1) )不应与任何数据帧列名相同。

您也可以选择多个列,但请记住上面的粗体注释

代码语言:javascript
运行
AI代码解释
复制
import org.apache.spark.sql.functions._
d1.as("d1").join(d2.as("d2"), $"d1.id" === $"d2.id").select(Seq(1, 2) map d2.columns map col: _*)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43859232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档