Возьмите существующий DataFrame и вложите его в новый с определенной структурой в scala spark - PullRequest
0 голосов
/ 22 февраля 2019

Я пишу тесты для функции, которая принимает DataFrame actualDF и в какой-то момент запускает actualDF.select("message.data.*", "message.headers.timestamp"), и у меня есть данные, которые будут выбраны message.data.* как DataFrame с именем testDF.Поэтому мне нужно сделать новый actualDF, который возвращает данные testDF, а также фальшивую временную метку, когда выполняется приведенный выше оператор выбора.

Это данные внутри testDF

root
 |-- ACCEPTED_DATE: string (nullable = true)
 |-- BRAND_ID: string (nullable = true)
 |-- ...etc...

И вот что мне нужно, чтобы подделка actualDF выглядела так:

root
 |-- message: struct (nullable = true)
 |    |-- data: struct (nullable = true)
 |    |    |-- ACCEPTED_DATE: string (nullable = true)
 |    |    |-- BRAND_ID: string (nullable = true)
 |    |    |-- ...etc...
 |    |-- headers: struct (nullable = true)
 |    |    |-- timestamp: string (nullable = true)

У меня естьпопытался сделать несколько вещей, чтобы достичь этого, но я не думаю, что приблизился к правильному пониманию, самое близкое, что я получил, было:

val empty = spark.emptyDataFrame
val actualDF = empty.withColumn( "data", struct( testDF.columns.map(s => testDF.col(s)): _* ) ).withColumn("headers.timestamp", lit(1))

, который я надеялся прикрепить testDF к пустому DataFrame, но это не сработало, и я полагаю, что в любом случае это было бы плохим решением.

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