【发布时间】:2019-08-09 18:43:12
【问题描述】:
为此苦苦挣扎了一段时间,但我仍然无法解决这个问题。
我正在尝试 flatMap(或者使用 .withColumn 和 explode(),因为它看起来更容易,所以我不会丢失列名),但我总是收到错误 UDTF expected 2 aliases but got 'name' instead。
我已经重新审视了一些类似的问题,但由于架构过于简单,因此没有一个能说明问题。
我尝试执行 flatMap 的架构列是以下...
StructField(CarMake,
StructType(
List(
StructField(
Models,
MapType(
StringType,
StructType(
List(
StructField(Variant, StringType),
StructField(GasOrPetrol, StringType)
)
)
)
)
)
))
我想通过像这样调用explode()来实现...
carsDS
.withColumn("modelsAndVariant", explode($"carmake.models"))
...是在没有嵌套的 Map 和 Struct 的情况下实现 Row,因此我得到的行数与变体一样多。
输入示例
(country: Sweden, carMake: Volvo, carMake.Models: {"850": ("T5", "petrol"), "V50": ("T5", "petrol")})
示例输出
(country: Sweden, carMake: Volvo, Model: "850", Variant: "T5", GasOrPetrol: "petrol"}
(country: Sweden, carMake: Volvo, Model: "V50", Variant: "T5", GasOrPetrol: "petrol"}
基本上将嵌套的 Map 及其内部 Struct 都留在同一级别。
【问题讨论】:
-
请添加一些可用于回答问题的示例数据(代码)(即以编程方式创建的数据框)
标签: scala apache-spark apache-spark-sql