Объедините все значения карты, где каждое значение является фреймом данных. - PullRequest
1 голос
/ 25 мая 2019

В Scala с использованием Spark у меня есть карта, где ключом является строка, а значением является дата-фрейм.

Схема выглядит следующим образом:

scala.collection.immutable.Map[String,org.apache.spark.sql.DataFrame] = Map(Key_A -> [value_col1: string, value_col2: string ... 1 more field], Key_B -> [value_col1: string, value_col2: string ... 1 more field])

Мне все равноо ключах здесь.Мне нужен кадр данных, который объединяет все значения и будет выглядеть следующим образом.

value_col1     value_col2
    1               2
    1.1             2.2

Я ищу, как это сделать, используя как простые, так и рекомендуемые / эффективные подходы.

1 Ответ

0 голосов
/ 29 мая 2019

Вы можете использовать карту, чтобы перебрать значения карты и объединить кадры данных.Если ваша схема остается идентичной для всех фреймов данных, вы можете использовать union для объединения данных:

val mapping = Map("df1" -> df1, "df2" -> df)

val finalDF = mapping.values.map{df =>
  df.select("*")
}.reduce((d0, d1) => d0.union(d1))

В противном случае, если фреймы данных имеют другую схему, замените union на inner join:

val finalDF = mapping.values.map{df =>
  df.select("*")
}.reduce((d0, d1) => d0.join(d1, "id"))

Здесь мы предполагаем, что кадры данных имеют одно и то же поле id.

...