Возврат объединенного набора данных после объединения с Spark Scala - PullRequest
0 голосов
/ 02 декабря 2018

Учитывая два приведенных ниже Spark Datasets, flights и capitals, какой самый эффективный способ вернуть объединенный (то есть "присоединенный") результат без предварительного преобразования в DataFrame или выписывание всех столбцов по имени методом .select()?Я знаю, например, что я могу получить доступ либо к кортежу с помощью (например, .map(x => x._1), либо с помощью оператора * с:

result.select("_1.*","_2.*")

Но последнее может привести к дублированию имен столбцов, и янадеясь на более чистое решение.

Спасибо за вашу помощь.

case class Flights(tripNumber: Int, destination: String)

case class Capitals(state: String, capital: String)

val flights = Seq(
  (55, "New York"),
  (3, "Georgia"),
  (12, "Oregon")
).toDF("tripNumber","destination").as[Flights]

val capitals = Seq(
  ("New York", "Albany"),
  ("Georgia", "Atlanta"),
  ("Oregon", "Salem")
).toDF("state","capital").as[Capitals]

val result = flights.joinWith(capitals,flights.col("destination")===capitals.col("state"))

1 Ответ

0 голосов
/ 02 декабря 2018

Есть 2 варианта, но вам придется использовать join вместо joinWith:

  1. Это лучшая часть API набора данных, это отбросить один из столбцов соединенияпоэтому нет необходимости повторять столбцы проекции в выборке: val result = flights.join(capitals,flights("destination")===capitals("state")).drop(capitals("state"))
  2. переименуйте столбец объединения, чтобы он был одинаковым в обоих наборах данных, и используйте немного другой способ задания объединения: val result = flights.join(capitals.withColumnRenamed("state", "destination"), Seq("destination"))

Вывод:

result.show
+-----------+----------+-------+
|destination|tripNumber|capital|
+-----------+----------+-------+
|   New York|        55| Albany|
|    Georgia|         3|Atlanta|
|     Oregon|        12|  Salem|
+-----------+----------+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...