加载自定义文件以在Spark with Yarn中与UDF一起使用

时间:2018-07-10 14:01:32

标签: scala apache-spark apache-spark-sql yarn

我有一个函数,需要在集群模式下使用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作业的驱动程序可以按原样获取文件的正确方法是什么?

0 个答案:

没有答案