2017-01-06 20 views
1

私はScalaを使ってSparkを使ってデータ処理を行っています。私はXMLデータをデータフレームにマッピングしています。私はUDFにパラメータとしてRowを渡しており、2つの複合型オブジェクトをリストとして抽出しようとしています。スパークは私に次のエラーを与えている:Spark-ScalaのSeq [Row]を返します。UDF

Exception in thread "main" java.lang.UnsupportedOperationException: Schema for type org.apache.spark.sql.Row is not supported

def testUdf = udf((testInput: Row) => { 
    val firstObject = testInput.getAs[Row]("Object1") 
    val secondObject = testInput.getAs[Row]("Object2") 
    val returnObject = Seq[firstObject,secondObject] 

    returnObject 
}) 

あなたは私が間違っているのを教えてもらえます。ありがとう。

答えて

2

UDFはオブジェクトを返すことができません。戻り値の型は、Data Types tableのScalaのValue型の列挙型のいずれかでなければなりません。

ここではUDFは必要ありません。

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

df.select(array(col("Object1"), col("Object2")) 

または

df.select(array(col("path.to.Object1"), col("path.to.Object2")) 

Object1Object2場合ではないトップレベルの列です: Object1Object2 は、同じスキーマを持っている場合は、 array機能を使用することができます(それはとにかくそれ以外の場合は動作しないでしょう)。

関連する問題