Обернутый массив$ofRef не может быть приведен к scala.collection.immutable.Seq

#scala #apache-spark #pyspark #user-defined-functions #scala-collections

Вопрос:

Я пытаюсь преобразовать некоторый код Python в Scala.

Код на Python:

 def col_c(o_row_ids,n_row_ids):
    o_set=set(o_row_ids)
    n_set=set(n_row_ids)
    if o_set=n_set
        return "in"
    elif o_set < n_set:
        return "Me"
    elif n_set < o_set:
        return "Sp"
    return "SM"
 

Код Scala:

 def col_c: UserDefinedFunction = udf((o_row_ids:Seq[String], n_row_ids: Seq[String]) => {
    val o_set = o_row_ids.toSet.count(z => true) //set(o_row_ids)
    val n_set = n_row_ids.toSet.count(z=> true)
    if (o_set == n_set)
        "In"
    else if( o_set < n_set)
        "Me"
    else if (n_set < o_set)
        "Sp"
    else "SM"
})
 

Но я получаю следующую ошибку:

не удалось выполнить заданную пользователем функцию(col_c(массив(строка),массив(строка)=>строка scala.collection.изменяемый.Обернутый массив$ofRef не может быть передан в scala .collection.неизменяемый.Далее

Есть какие-нибудь предложения, как предотвратить эту ошибку?

Ответ №1:

WrappedArray расширяется scala.collection.mutable.Seq , которое само расширяется scala.collection.Seq .

Похоже , вы импортировали scala.collection.immutable.Seq , следовательно, ошибка.

Одна из возможностей решить вашу проблему-ввести ваш UDF с входными данными как scala.collection.Seq .