繁体   English   中英

如何在Scala中将Spark数据帧列表一起加入?

[英]How can I join a list of Spark dataframes together in Scala?

我有Seq火花dataframes(即Seq[org.apache.spark.sql.DataFrame]它可以含有1个或多个元素。 每个数据框都有一个公用的列列表,每个数据框还具有一些其他列。 我想做的是使用联接条件中的那些通用列将所有这些数据框联接在一起(请记住,数据框的数量是未知的)

如何将所有这些数据框结合在一起? 我想我可以foreach过他们,但似乎并不很优雅。 任何人都可以提出更实用的方法吗? 编辑:递归函数比foreach更好,我现在正在研究中,完成后将其发布到此处

这是一些代码,创建一个由n个数据帧组成的列表(在这种情况下,n = 3),每个数据帧包含idProduct列:

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)

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

dataFrames是一个List ; 您可以使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM