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の三番目のパラメータからStringType
、BooleanType
またはIntegerType
のクラスを取得することはできません。私が得た例外はtype mismatch; found : Object required: org.apache.spark.sql.types.DataType
です。しかし、パラメーターの型をArray [(String、String、DataType)]に変更すると、変数の型と一致しません。
私の質問は、どのようなデータ型をメソッドmapToStructの3番目のパラメータに選択する必要がありますし、実行時にこのオブジェクトのクラスを取得できます。
ありがとうございます。
をあなたが何を意味するか「それは変数の型と一致していません。」 ? – pamu
@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