2017-01-06 5 views
1

Я использую Spark с Scala для обработки некоторых данных. У меня есть данные XML, сопоставленные с dataframe. Я передаю строку как параметр в UDF и пытаюсь извлечь два объекта сложных типов в виде списка. Спарк дает мне следующее сообщение об ошибке:Return Seq [Row] от Spark-Scala 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 не может вернуть объектов. Тип возврата должен быть одним из типов, перечисленных в столбце Тип значения в Scala в Data Types table.

Хорошая новость: здесь нет необходимости в UDF. Если Object1 и Object2имеют ту же схему (он не будет работать в противном случае в любом случае), вы можете использовать функцию array:

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

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

или

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

если Object1 и Object2 не являются столбцы верхнего уровня.