我正在为一个接受了DataFrame actualDF
并且在某个时候运行actualDF.select("message.data.*", "message.headers.timestamp")
的函数编写测试,并且我有message.data.*
将选择的数据作为名为{ {1}}。因此,我需要做的是一个新的testDF
,它在运行上述select语句时返回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))
粘贴到一个空的DataFrame上,但是它没有用,我认为无论如何还是一个不好的解决方案。