我目前正在使用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中相当新,所以有人可以指导我如何构建这种类型的函数吗?
感谢。
答案 0 :(得分:2)
我不知道我是否理解你的问题,但map可能是你的朋友。
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)
}
}