连接嵌套到spark中的数组的所有struct字段

时间:2016-08-06 14:51:18

标签: scala apache-spark

我的架构结构如下。我需要连接#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) 

2 个答案:

答案 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