【发布时间】:2020-03-27 10:09:10
【问题描述】:
我在我的 UDF 中使用 ua-parser 来解析用户代理信息。而且我注意到这些作业与没有解析器的作业相比非常慢。这是一个例子:
import org.uaparser.scala.Parser
val parser: Parser = Parser.default
val parseDeviceUDF = udf((ua: String) => Try(parser.parse(ua).device.family).toOption.orNull)
奇怪的是,当我将作业作为 EMR 步骤提交时,速度很慢,但当我在 Zeppelin 或 Spark shell 中运行相同的代码时,它工作正常。我将数据写入镶木地板文件。这就是它被卡住的阶段。
【问题讨论】:
-
Zeppelin/shell 测试和实际工作中的数据大小是否存在差异?我会使用 UA 解析器并将其添加到我的项目中并添加一些日志记录以查看其行为 - 也许它初始化太多次。我还看到有一个缓存解析器,它可能会解决你的问题。
标签: scala apache-spark user-defined-functions amazon-emr parquet