2017-02-17 1 views
0

ich derzeit Funken und Scala bin mit 2.11.8Array of String Array von Struct in Scala + Spark-

Ich habe folgendes Schema:

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

Ich versuche UDF zu verwenden, um es zu konvertieren auf die folgenden:

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) 

Daten So Quelle sieht wie folgt aus:

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

Ich muss "" (Leerzeichen) als Trennzeichen verwenden, weiß aber nicht, wie man das in scala macht.

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

Ich bin ziemlich neu in Scala, kann mir also jemand helfen, wie man diese Art von Funktion erstellt?

Danke.

Antwort

2

Ich weiß nicht, ob ich dein Problem richtig verstehe, aber map könnte dein Freund sein.

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); 
} 

, wenn Sie es zuerst zu analysieren haben:

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) 
    } 
} 
+0

Danke für Ihre schnelle Antwort. Ich versuche, Ihren Vorschlag zu implementieren, aber es sagt, dass "nicht aufgelöst werden kann". Sollte ich eine andere Methode verwenden? – SuWon

+0

[String.split] (http://www.scala-lang.org/api/2.12.x/scala/collection/immutable/StringOps.html#split (Trennzeichen: Char): Array [String]) ist eine Methode für Saiten. Ich weiß nicht, welcher Typ in Ihren umhüllten Arrays ist. Vielleicht müssen Sie toString für jeden Wert aufrufen, um eine Zeichenfolge zu erhalten. val split = s.toString.split ("") –

+0

Danke. Ich konnte dieses Problem mit Ihrer Hilfe lösen. – SuWon

Verwandte Themen