Как я могу присоединиться к списку данных Spark вместе в Scala? - PullRequest
0 голосов
/ 16 мая 2018

У меня есть 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)?

1 Ответ

0 голосов
/ 16 мая 2018

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...