字符串数组到Scala Spark中的结构数组



我当前正在使用Spark和Scala 2.11.8

我有以下模式:

root
|-- partnumber: string (nullable = true)
|-- brandlabel: string (nullable = true)
|-- availabledate: string (nullable = true)
|-- descriptions: array (nullable = true)
|-- |--   element: string (containsNull = true) 

我试图使用UDF将其转换为以下内容:

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)
|    |    |-- code: string (nullable = true)
|    |    |-- cost: int(nullable = true)

因此,源数据看起来像这样:

[WrappedArray(a abc 100,b abc 300)]
[WrappedArray(c abc 400)]

我需要使用"(空间)作为定界符,但不知道如何在Scala中执行此操作。

def convert(product: Seq[String]): Seq[Row] = {
    ??/
}

我在Scala中很新,所以有人可以指导我如何构建此类功能?

谢谢。

我不知道我是否理解您的问题,但地图可能是您的朋友。

case class Row(a: String, b: String, c: Int)
val value = List(List("a", "abc", 123), List("b", "bcd", 321))
value map {
    case List(a: String, b: String, c: Int) => Row(a,b,c);
}

如果您必须先解析:

val value2 = List("a b 123", "c d 345")
value2 map {
    case s => { 
        val split = s.toString.split(" ")
        Row(split(0), split(1), split(2).toInt)
    }
}

相关内容

  • 没有找到相关文章

最新更新