#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
.