gpt4 book ai didi

scala - 从 Uber Jar 中的资源加载 CSV 文件作为数据框

转载 作者:行者123 更新时间:2023-12-04 15:40:08 26 4
gpt4 key购买 nike

因此,我制作了一个在 Spark 中运行的 Scala 应用程序,并使用 sbt> 程序集创建了 Uber Jar。

我加载的文件是应用程序需要的查找,因此想法是将它打包在一起。它在 InteliJ 中使用路径“src/main/resources/lookup01.csv”运行良好

我在 Windows 中开发,在本地测试,然后将其部署到远程测试服务器。

但是当我在 Windows 机器上调用 spark-submit 时,我得到了错误:

“org.apache.spark.sql.AnalysisException:路径不存在:文件:/H:/dev/Spark/spark-2.4.3-bin-hadoop2.7/bin/src/main/resources/”

它似乎试图在 sparkhome 位置而不是从 JAr 文件中查找文件。

我如何表达路径,以便它可以从 JAR 包中查找文件?

我加载 Dataframe 的方式的示例代码。加载后,我将其转换为其他结构,如 map 。

val v_lookup = sparkSession.read.option( "header", true ).csv( "src/main/resources/lookup01.csv")

我想要实现的是获得表达路径的方式,以便它在我尝试运行 JAR 的每个环境中工作,理想情况下在开发时也可以在 InteliJ 中工作。

编辑:scala 版本为 2.11.12

更新:

似乎要了解 JAR 中的文件,我必须将其作为流读取,下面的代码有效,但我无法找到一种安全的方法来提取文件的 header ,例如 SparkSession.read .选项有。

val fileStream = scala.io.Source.getClass.getResourceAsStream("/lookup01.csv")
val inputDF = sparkSession.sparkContext.makeRDD(scala.io.Source.fromInputStream(fileStream).getLines().toList).toDF

当应用 makeRDD 时,我得到了 RDD,然后可以将其转换为数据帧,但似乎我失去了使用“读取”中的选项将 header 解析为模式的能力。

使用 makeRDD 时有什么解决方法吗?

另一个问题是我似乎必须手动将行解析为列。

最佳答案

你必须从classPath中得到正确的路径

考虑到你的文件在 src/main/resources 下:

val path = getClass.getResource("/lookup01.csv")

val v_lookup = sparkSession.read.option( "header", true ).csv(path)

关于scala - 从 Uber Jar 中的资源加载 CSV 文件作为数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58101701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com