2016-10-30 17 views
0
import org.apache.spark.sql.types.StructField 
import org.apache.spark.sql.types.StructType 
import org.apache.spark.sql.types.StringType 
import org.apache.spark.sql.type.NumericType 
import org.apache.spark.sql.type.BooleanType 
    .... 
    .... 
val TableSchema = Array(
     ("ID", IntegerType), 
     ("Name", StringType), 
     ("TNum", integerType), 
     ("Handled", BooleanType), 
     ("Value", StringType) 
    ) 

私はテーブルのスキーマ情報の配列を持っていますが、これをsparkデータフレームの作成に使用できる構造体にマップしようとしています。変換後の配列は次のようになります。実行時にスカラで実行時にクラスを取得する

val struct = Array(
StructField("ID", NumericType), 
StructField("Name", BooleanType), 
StructField("TNum", NumericType), 
StructField("Handled", BooleanType), 
StructField("Value", StringType)) 

したがって、各要素をStructFieldに変換するメソッドを作成しようとしています。これは私の試みです。このような状況で

def mapToStruct(arr:Array[(String, String, Object)])={ 
    val newArr = arr.map(ele => StructField(ele._1, ele._2)) 
    newArr 
    } 

、私は方法のmapToStructの三番目のパラメータからStringTypeBooleanTypeまたはIntegerTypeのクラスを取得することはできません。私が得た例外はtype mismatch; found : Object required: org.apache.spark.sql.types.DataTypeです。しかし、パラメーターの型をArray [(String、String、DataType)]に変更すると、変数の型と一致しません。

私の質問は、どのようなデータ型をメソッドmapToStructの3番目のパラメータに選択する必要がありますし、実行時にこのオブジェクトのクラスを取得できます。
ありがとうございます。

+0

をあなたが何を意味するか「それは変数の型と一致していません。」 ? – pamu

+0

@parmu '型の不一致。 found:Array [Array((String、String、org.apache.spark.sql.types.DataType)]必須:配列[(String、String、org.apache.spark.sql.types.DataType)] :(String、String、org.apache.spark.sql.types.AtomicType with Serializable)<:(String、String、org.apache.spark.sql.types.DataType)しかし、クラスArrayはT型では不変です_ <:(String、String、org.apache.spark.sql.types.DataType)などのワイルドカード型を調べることができます。 – Frankie

答えて

1

これは動作するはずです:

import org.apache.spark.sql.types. 

val tableSchema: Array[(String, DataType)] = Array(
    ("ID", IntegerType), 
    ("Name", StringType), 
    ("Handled", BooleanType), 
    ("Value", StringType) 
) 

def mapToStruct(arr: Array[(String, DataType)]): Array[StructField] = arr.map(e => StructField(e._1, e._2)) 
+0

ありがとうございます。型推論がtableSchemaの正しいデータ型を設定できない理由を説明できますか? – Frankie

関連する問題