如何在spark scala dataframe

时间:2018-04-20 06:51:44

标签: scala apache-spark

我有数据帧架构 -

resultDF.printSchema

 |-- SKU_ID_MAP: string (nullable = true)
 |-- SKU_IMAGE_MAP: map (nullable = true)
 |    |-- key: string
 |    |-- value: struct (valueContainsNull = true)
 |    |    |-- image_id: string (nullable = true)
 |    |    |-- image_name: string (nullable = true)
 |    |    |-- image_path: string (nullable = true)

我想从DF上面创建这样的最终数据帧。

   case class Devicesku2 (
     sku_id : String,
     sku_images: Map[String, ImageInfo2]
   )

   resultDF.map(
      row => Devicesku2(
                row.getAs[String]("SKU_ID"),
                row.getAs[Map]("SKU_IMAGE_MAP")
   ).toDF

在上面的row.getAs [Map]给出了编译时错误,因为value是struct type。

有人可以为此提供帮助吗? 谢谢,

`

1 个答案:

答案 0 :(得分:1)

如果您将case class的元素重命名为:

case class Devicesku2 (
  sku_id_map: String,
  sku_image_map: Map[String, ImageInfo2]
)

你可以使用

resultDF.as[Devicesku2]

否则,如Aluan Haddad的评论所述,您需要

row.getAs[Map[String, ImageInfo2]]("SKU_IMAGE_MAP")