Создайте фрейм данных, комбинируя фреймы данных заголовка и данных - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть 2 кадра данных:

|data          |
|--------------|
|[1,Rob,12]    |
|[2,Jeremy,11] |
|[3,Bart,14]   |


scala> data.printSchema()

root
 |-- data: array (nullable = true)
 |    |-- element: string (containsNull = true)

и

|headers         |
|----------------|
|[id,name,deptid]|


scala> headers.printSchema()

root
|-- headers: array (nullable = true)
|    |-- element: string (containsNull = true)

Вопрос : Как создать выходной кадр данных в следующем формате, используяЗаголовки DF и данные DF?

| id | name  | deptid|
|----| ------|-------|
| 1  | Rob   | 12    |
| 2  | Jeremy| 11    |
| 3  | Bart  | 14    |

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вы можете создать список имен столбцов из headers DataFrame и использовать select для сопоставления элементов массива data с соответствующими элементами массива headers:

import org.apache.spark.sql.functions._

val dataDF = Seq(
  Seq("1", "Rob", "12"),
  Seq("2", "Jeremy", "11"),
  Seq("3", "Bart", "14")
).toDF("data")

val headersDF = Seq(
  Seq("id", "name", "deptid")
).toDF("headers")

val cols = headersDF.first.getSeq[String](0)
// cols: Seq[String] = WrappedArray(id, name, deptid)

val resultDF = dataDF.
  select( (0 until cols.size).map( i => $"data"(i).as(cols(i)) ): _* )

resultDF.show
// +---+------+------+
// | id|  name|deptid|
// +---+------+------+
// |  1|   Rob|    12|
// |  2|Jeremy|    11|
// |  3|  Bart|    14|
// +---+------+------+
0 голосов
/ 24 сентября 2018

Вы можете проверить следующий поток, чтобы получить столбцы из массива:

Как разбить массив на несколько столбцов в Spark

Вы можете переименовать столбец с помощью функцииColumnRenamed.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...