Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Scala中连接两个数据帧,并通过索引从数据帧中选择几个列?_Scala_Apache Spark_Dataframe - Fatal编程技术网

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

如何在Scala中连接两个数据帧,并通过索引从数据帧中选择几个列?,scala,apache-spark,dataframe,Scala,Apache Spark,Dataframe,我必须连接两个数据帧,这与这里给出的任务非常相似 但是,我只想从df2中选择第二列。在我的任务中,我将对数据帧列表中的reduce函数中的两个数据帧使用join函数。在此数据帧列表中,列名将不同。但是,在每种情况下,我都希望保留df2的第二列 我在任何地方都找不到如何通过数据帧的编号索引来选择数据帧的列。感谢您的帮助 编辑: 答复 我想出了解决办法。有一种方法可以做到这一点: def joinDFs(df1: DataFrame, df2: DataFrame): DataFrame = {

我必须连接两个数据帧,这与这里给出的任务非常相似

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

我在任何地方都找不到如何通过数据帧的编号索引来选择数据帧的列。感谢您的帮助

编辑:

答复

我想出了解决办法。有一种方法可以做到这一点:

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
操作中应用这个函数

var listOfDFs: List[DataFrame] = List()
// Populate listOfDFs as you want here
val joinedDF = listOfDFs.reduceLeft((x, y) => {joinDFs(x, y)})

要选择数据帧中的第二列,只需执行以下操作:

val df3 = df2.select(df2.columns(1))

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

如果要在
reduce
函数中定义的
join
select
方法与
类似,则应执行以下操作:

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)
不应与任何数据帧列名相同。

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

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: _*)

你能举例说明你的数据帧吗?@Psidom:我想出了一个解决方案。请看编辑。