【发布时间】:2019-08-15 01:05:57
【问题描述】:
在我尝试处理的 JSON 对象中,我得到一个嵌套的 StructType,其中每个键代表一个特定位置,然后包含货币和价格:
-- id: string (nullable = true)
-- pricingByCountry: struct (nullable = true)
|-- regionPrices: struct (nullable = true)
|-- AT: struct (nullable = true)
|-- currency: string (nullable = true)
|-- price: double (nullable = true)
|-- BT: struct (nullable = true)
|-- currency: string (nullable = true)
|-- price: double (nullable = true)
|-- CL: struct (nullable = true)
|-- currency: string (nullable = true)
|-- price: double (nullable = true)
...etc.
我想将其展开,这样我就可以为每个国家/地区设置一行,而不是每个国家/地区都有一列:
+---+--------+---------+------+
| id| country| currency| price|
+---+--------+---------+------+
| 0| AT| EUR| 100|
| 0| BT| NGU| 400|
| 0| CL| PES| 200|
+---+--------+---------+------+
这些解决方案在直觉上是有意义的:Spark DataFrame exploding a map with the key as a member 和 Spark scala - Nested StructType conversion to Map,但不幸的是不起作用,因为我传递的是一列而不是整行来进行映射。我不想手动映射整行——只是包含嵌套结构的特定列。我想在结构中维护与“id”处于同一级别的其他几个属性。
【问题讨论】:
-
你可以尝试先展平结构展平结构 (stackoverflow.com/questions/38753898/…) 然后做一个 unpivot/stack (stackoverflow.com/questions/42465568/…)
标签: scala dataframe apache-spark