Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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中将Spark数据帧列表连接在一起?_Scala_Apache Spark - Fatal编程技术网

如何在Scala中将Spark数据帧列表连接在一起?

如何在Scala中将Spark数据帧列表连接在一起?,scala,apache-spark,Scala,Apache Spark,我有一个Spark数据帧的Seq(即Seq[org.apache.Spark.sql.DataFrame]),它可以包含一个或多个元素。 每个数据帧都有一个公共列列表,每个数据帧还具有一些附加列。我想做的是使用连接条件中的公共列将所有这些数据帧连接在一起(记住,数据帧的数量是未知的) 如何将所有这些数据帧连接在一起?我想我可以用foreachover他们,但这似乎不是很优雅。有人能想出一个更实用的方法吗?编辑:递归函数比foreach更好,我现在正在研究,完成后将在这里发布 下面是一些代码,用于

我有一个Spark数据帧的
Seq
(即
Seq[org.apache.Spark.sql.DataFrame]
),它可以包含一个或多个元素。 每个数据帧都有一个公共列列表,每个数据帧还具有一些附加列。我想做的是使用连接条件中的公共列将所有这些数据帧连接在一起(记住,数据帧的数量是未知的)

如何将所有这些数据帧连接在一起?我想我可以用
foreach
over他们,但这似乎不是很优雅。有人能想出一个更实用的方法吗?编辑:递归函数比foreach更好,我现在正在研究,完成后将在这里发布

下面是一些代码,用于创建n个数据帧的列表(在本例中为n=3),每个数据帧包含列
id
&
Product

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
val conf = new SparkConf().setMaster("local[*]")
val spark = SparkSession.builder().appName("Feature Generator tests").config(conf).config("spark.sql.warehouse.dir", "/tmp/hive").enableHiveSupport().getOrCreate()
val df = spark.range(0, 1000).toDF().withColumn("Product", concat(lit("product"), col("id")))
val dataFrames = Seq(1,2,3).map(s => df.withColumn("_" + s.toString, lit(s)))
为了澄清这一点,
dataFrames.head.columns
返回
Array[String]=Array(id,Product,_1)


我如何在
id
列和
Product
列上将这n个数据帧连接在一起,以便返回的数据帧具有
Array[String]=Array(id,Product,_1,_2,_3)

数据帧是一个
列表
;您可以使用
List.reduce
方法连接内部的所有数据帧:

dataFrames.reduce(_.join(_, Seq("id", "Product"))).show

//+---+---------+---+---+---+
//| id|  Product| _1| _2| _3|
//+---+---------+---+---+---+
//|  0| product0|  1|  2|  3|
//|  1| product1|  1|  2|  3|
//|  2| product2|  1|  2|  3|
//|  3| product3|  1|  2|  3|
//|  4| product4|  1|  2|  3|
//| ... more rows

当我们有一个庞大的数据帧列表要加入时,这就不起作用了。