我的架构结构如下。我需要连接#VALUE,@ DescriptionCode和@LanguageCode这些嵌套到一个数组。
root
|-- partnumber: string (nullable = true)
|-- brandlabel: string (nullable = true)
|-- availabledate: string (nullable = true)
|-- description: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- #VALUE: string (nullable = true)
| | |-- @DescriptionCode: string (nullable = true)
| | |-- @LanguageCode: string (nullable = true)
我已经尝试了很多,但对我来说没什么用。 我需要以下架构
root
|-- partnumber: string (nullable = true)
|-- brandlabel: string (nullable = true)
|-- availabledate: string (nullable = true)
|-- descriptions: array (nullable = true)
|-- |-- element: string (containsNull = true)
答案 0 :(得分:1)
我相信你需要创建一个用户定义的函数:
import org.apache.spark.sql.functions._
val func: (Seq[Row]) => Seq[String] = {
_.map(
element =>
element.getAs[String]("#VALUE") +
element.getAs[String]("@DescriptionCode") +
element.getAs[String]("@LanguageCode")
)
}
val myUDF = udf(func)
df.withColumn("descriptions", myUDF(col("description"))).drop(col("description"))
有关UDF的更多信息,请阅读this article。
答案 1 :(得分:0)
-j