gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:16:09 25 4
gpt4 key购买 nike

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

如何将所有这些数据框连接在一起?我想我可以 foreach在他们之上,但这似乎不是很优雅。任何人都可以想出一个更实用的方法吗?编辑:递归函数会比 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 上将这 n 个数据帧连接在一起& Product以便返回的数据帧具有列 Array[String] = Array(id, Product, _1, _2, _3) ?

最佳答案

dataFramesList ;您可以使用 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

关于scala - 如何在 Scala 中将 Spark 数据帧列表连接在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50359939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com