У меня есть Seq
фреймов данных Spark (т. Е. Seq[org.apache.spark.sql.DataFrame]
), он может содержать 1 или несколько элементов.Существует список столбцов, который является общим для каждого из этих фреймов данных, каждый фрейм данных также имеет несколько дополнительных столбцов.То, что я хотел бы сделать, это объединить все эти кадры данных, используя эти общие столбцы в условиях соединения (помните, что число данных кадров неизвестно)
Как я могу объединить все эти кадры данных?Полагаю, я мог бы справиться с ними, но это не очень элегантно.Кто-нибудь может придумать более функциональный способ сделать это? edit: рекурсивная функция была бы лучше, чем 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)
.
Как можно объединить эти n фреймов данных вместе в столбцах id
& Product
, чтобы возвращаемый фрейм данных имел столбцы Array[String] = Array(id, Product, _1, _2, _3)
?