2016-08-06 2 views
0

私のスキーマ構造は以下のとおりです。 #VALUE、@ DescriptionCodeと@LanguageCodeを連結する必要があります。これらは配列にネストされています。sparkの配列にネストされたすべての構造体フィールドを連結

root 
|-- partnumber: string (nullable = true) 
|-- brandlabel: string (nullable = true) 
|-- availabledate: string (nullable = true) 
|-- description: array (nullable = true) 
| |-- element: struct (containsNull = true) 
| | |-- #VALUE: string (nullable = true) 
| | |-- @DescriptionCode: string (nullable = true) 
| | |-- @LanguageCode: string (nullable = true) 

私は多くを試しましたが、何も私のために働いていません。 は、私はあなたがユーザー定義関数を作成する必要があると信じて、次のスキーマ

root 
|-- partnumber: string (nullable = true) 
|-- brandlabel: string (nullable = true) 
|-- availabledate: string (nullable = true) 
|-- descriptions: array (nullable = true) 
|-- |-- element: string (containsNull = true) 
+0

あなたが試したことを分かち合うことができますか? – eliasah

答えて

0

を必要とする:UDFの詳細については

import org.apache.spark.sql.functions._ 

val func: (Seq[Row]) => Seq[String] = { 
    _.map( 
    element => 
     element.getAs[String]("#VALUE") + 
     element.getAs[String]("@DescriptionCode") + 
     element.getAs[String]("@LanguageCode") 
) 
} 

val myUDF = udf(func) 

df.withColumn("descriptions", myUDF(col("description"))).drop(col("description")) 

を、あなたはthis articleを読むことができます。

関連する問題