Я пытаюсь выделить функции в UDF для написания тестов, однако это вызывает ошибки типа сериализации?Я пробовал разные форматы создания UDF, но он все еще не работает.
Почему это работает?
protected val normalizeDomain = udf {(dealer_url: String) =>
var domain = if (dealer_url.startsWith("http://") || dealer_url.startsWith("https://")) dealer_url else s"http://$dealer_url"
domain = new URL(domain).getHost
if (domain.startsWith("www.")) domain.replace("www.", "") else domain
}
Но не это?
def normalizeDomainDef(dealer_url: String):String = {
var domain = if (dealer_url.startsWith("http://") || dealer_url.startsWith("https://")) dealer_url else s"http://$dealer_url"
domain = new URL(domain).getHost
if (domain.startsWith("www.")) domain.replace("www.", "") else domain
}
val normalizeDomain = udf[String, String](normalizeDomainDef)
При выполнении последнегоЯ получаю:
Caused by: java.io.NotSerializableException: line9e1150bafcc941e3b83a5f4ad173d2ae122.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$DealerVDPUrlMaker$
Serialization stack:
- object not serializable (class: line9e1150bafcc941e3b83a5f4ad173d2ae122.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$DealerVDPUrlMaker$, value: line9e1150bafcc941e3b83a5f4ad173d2ae122.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$DealerVDPUrlMaker$@131552b)
- field (class: line9e1150bafcc941e3b83a5f4ad173d2ae122.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$DealerVDPUrlMaker$$anonfun$3, name: $outer, type: class line9e1150bafcc941e3b83a5f4ad173d2ae122.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$DealerVDPUrlMaker$)
- object (class line9e1150bafcc941e3b83a5f4ad173d2ae122.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$DealerVDPUrlMaker$$anonfun$3, <function1>)
- element of array (index: 4)
- array (class [Ljava.lang.Object;, size 5)
- field (class: org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$10, name: references$1, type: class [Ljava.lang.Object;)