2017-03-21 4 views
-1

Spark DataTypesを文字列から手動で構築する必要があるのは、列のDataTypeに依存します。 私のようなさまざまな方法でそれを試してみた:Spark DataTypeを文字列から手動で構築することは可能ですか?

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

しかし、それを正しく行うための方法を見つけることができません。これは可能ですか? 文字列として与えられた値を列の値と比較する必要があります。

答えて

0

私はすでにデータ構造を持っていますが、SparkのDataTypesに従ってデータ型を変換したいと思います。私は、ネストした配列や配列はないと仮定します。

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

しかし、このInteger.valueOf(data)はIntegerTypeではなくScala Integerの値を返しますか? – user2975535

+1

はい、スカラ型を返します。 Scala型からSpark型への実際の変換は、Row.fromSeq内で行われます。 –

関連する問題