2016-11-10 11 views
1

Apache SparkのDataFrameオブジェクト(Scalaインタフェースを使用しています)でRowオブジェクトを反復処理している場合、構造体の値を抽出する方法はありますか名前で?SPARK SCALAで行の型構造の要素を取得する

私は以下のコードを名前で抽出していますが、構造体の値を読み取る方法に問題があります。

値は文字列型であったならば、我々はこれを行っている可能性:

val resultDF=joinedDF.rdd.map{row=> 
     val id=row.getAs[Long]("id") 
     val values=row.getAs[String]("slotSize") 
     val feilds=row.getAs[String](values) 
     (id,values,feilds) 
     }.toDF("id","values","feilds") 

しかし、私の場合、値には、以下のスキーマに

v1: struct (nullable = true) 
    | |-- level1: string (nullable = true) 
    | |-- level2: string (nullable = true) 
    | |-- level3: string (nullable = true) 
    | |-- level4: string (nullable = true) 
    | |-- level5: string (nullable = true) 

を持って何を作ることで、この行を置き換えるものその値を与えられたコード作業は上記の構造を持っています。

row.getAs[String](values) 
+0

を> df?あなたの変換がDataFrame操作で表現できるように見え、プロセスの多くの問題を解決します。 – maasg

+0

私はいくつかの行単位の計算を行う必要があり、行ごとにデータフレームを走査するにはこの変換が必要です。 – satyambansal117

+0

どのような行方向の計算ですか? – maasg

答えて

12

あなたは私が最初にこのようなトップレベルから別の(構造体がスパーク内の別のとしてモデル化されている)を抽出structの要素にアクセスすることができますなぜあなたはDF => RDD =をやっている

val level1 = row.getAs[Row]("struct").getAs[String]("level1") 
関連する問題