spap(EMRで実行中)のUDFは、uaparserライブラリ(uap-scala)を使用してユーザエージェントからデバイスを解析するscalaで書かれています。小さなセットで作業する場合、それはうまく動作します(5000行)が、大きなセット(2M)で動作すると非常に遅くなります。私は労働者SparkのUDFは非常に遅いです
- がどのように私はこれを確立することができUDFドライバで実行されていることを信じていない作るもの、 は私が一覧表示するデータフレームを収集し、ドライバーにそれをループ試みたが、それも非常に遅かったですか?誰か別の理論を持っていますか?
- これが当てはまる場合、なぜこれが起こりますか?
これはUDFコードです:
def calcDevice(userAgent: String): String = {
val userAgentVal = Option(userAgent).getOrElse("")
Parser.get.parse(userAgentVal).device.family
}
val calcDeviceValUDF: UserDefinedFunction = udf(calcDevice _)
用法:
.withColumn("agentDevice", udfDefinitions.calcDeviceValUDF($"userAgent"))
おかげ ニール
いくつかの値が異なる行によって共有されることがありますか? –
はい、ユーザーエージェントが繰り返し実行されますが、リストはあまり小さくありません –
構文解析にはコストがかかるかもしれません - キャッシュを使用した場合のヒット%はどれですか? –