2017-03-21 3 views
-1

Ich muss Spark DataTypes manuell von String abhängig vom DataType der Spalte erstellen. Ich habe es auf verschiedene Weise versucht, wie:Ist es möglich, Spark DataType manuell aus Zeichenfolge zu erstellen?

dataType match { 
    case IntegerType => DataTypes.IntegerType(data.toInt) 

Aber die Art und Weise nicht finden, um es richtig zu tun. Ist das möglich? Ich muss den angegebenen Wert als String mit dem Wert in der Spalte vergleichen.

Antwort

0

Wie ich verstehe, haben Sie bereits eine Datenstruktur, aber wollen eine Konvertierung der Datentypen nach Spark DataTypes. Ich nehme an, es gibt keine verschachtelten Sequenzen oder Arrays.

object DataTypeUtil { 

    def anyValueOfStringWithDataType(dataWithType: (String, DataType)): Any = { 
    val dataType = dataWithType._2 
    val data = dataWithType._1 
    dataType match { 
     case _: StringType => data 
     case _: IntegerType => Integer.valueOf(data) 
     case _ => throw new IllegalArgumentException 
    } 
    } 

    def stringsToRows(values: Seq[String], dataTypes: Seq[DataType]): Row = 
    Row.fromSeq(values.zip(dataTypes).map(anyValueOfStringWithDataType)) 

} 
+0

Aber würde nicht Integer.valueOf (Daten) Wert genauso wie Scala Integer und nicht die IntegerType zurückgeben? – user2975535

+1

Ja, es gibt nur einen Scala-Typ zurück. Die eigentliche Konvertierung vom Scala-Typ zum Spark-Typ erfolgt innerhalb von Row.fromSeq. –

Verwandte Themen