gpt4 book ai didi

java - 如何读取资源文件? (谷歌云数据流)

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:15 25 4
gpt4 key购买 nike

我的数据流管道需要读取资源文件 GeoLite2-City.mmdb。我将它添加到我的项目中并运行了管道。我确认项目包 zip 文件存在于 GCS 上的暂存存储桶中。

但是,当我尝试读取资源文件 GeoLite-City.mmdb 时,我得到了一个 FileNotFoundException。我怎样才能解决这个问题?这是我的代码:

String path = myClass.class.getResource("/GeoLite2-City.mmdb").getPath();

File database = new File(path);

try
{

DatabaseReader reader = new DatabaseReader.Builder(database).build(); //<-this line get a FileNotFoundException

}

catch (IOException e)

{

LOG.info(e.toString());

}

我的项目包zip文件是“classes-WOdCPQCHjW-hRNtrfrnZMw.zip”(它包含类文件和 GeoLite2-City.mmdb)

路径值为“file:/dataflow/packages/staging/classes-WOdCPQCHjW-hRNtrfrnZMw.zip!/GeoLite2-City.mmdb”,但是无法打开。

这是选项。

--runner=BlockingDataflowPipelineRunner 
--project=peak-myproject
--stagingLocation=gs://mybucket/staging
--input=gs://mybucket_log/log.68599ca3.gz

目标是在 GCS 上转换日志文件,并将转换后的数据插入 BigQuery。当我在本地运行时,成功导入到 Bigquery。我认为本地 PC 和 GCE 在获取资源路径方面存在差异。

最佳答案

我认为问题可能在于 DatabaseReader 不支持位于 .zip 或 .jar 文件中的资源路径。

如果是这样,那么您的程序可以使用 DirectPipelineRunner 不是因为它是直接的,而是因为资源只是位于本地文件系统而不是 .zip 文件中(正如您的评论所说,路径是 C:/Users/Jennie/workspace/DataflowJavaSDK-master/eclipse/starter/target/classe‌ s/GeoLite2-City.mmdb,而在另一种情况下它是 file :/dataflow/packages/staging/classes-WOdCPQCHjW-hRNtrfrnZMw.zip!/GeoLite2-City.mmdb)

我在网上搜索了您可能在谈论的 DatabaseReader 类,看起来是 https://github.com/maxmind/GeoIP2-java/blob/master/src/main/java/com/maxmind/geoip2/DatabaseReader.java .

在这种情况下,您的代码很可能会通过以下较小的更改工作:

try
{
InputStream stream = myClass.class.getResourceAsStream("/GeoLite2-City.mmdb");
DatabaseReader reader = new DatabaseReader.Builder(stream).build();
}
catch (IOException e)
{
...
}

关于java - 如何读取资源文件? (谷歌云数据流),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30862698/

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