我有一个函数,需要在集群模式下使用Yarn在Spark作业中用作UDF。此函数使用来自外部源的数据初始化某些内部结构。这些数据不是表或表格数据,而是某种二进制专有格式。 (这是第三方依赖性。)
我尝试使用spark-submit --files
来获取此文件的位置,但是当我尝试打开它时,却出现了异常(is a directory
)。另外,从该文件中获取所有行或文本(使用SparkFiles
)对我来说毫无用处,因为我将要使用的功能仅接受文件名(无论如何我都无法打开它)。
我正在尝试执行类似的操作,其中path
是使用--files
发送的文件的文件名。
private def loadFile(path: String): SomeDataFormat = {
log.info(s"Trying to deserialize file $path")
try {
SomeFunctionInit(path).asInstanceOf[SomeDataFormat]
} catch {
case e: Exception =>
val sparkFilename = SparkFiles.get(path)
log.info(s"error opening (${e.getMessage}), trying with $sparkFilename")
SomeFunctionInit(sparkFilename).asInstanceOf[SomeDataFormat]
}
}
通过Spark作业的驱动程序可以按原样获取文件的正确方法是什么?