出于测试目的,我们希望写入一个相对的本地路径,如 target/pipelines
. 未遂的 URI
是
file://target/pipelines/output.parquet
通过 Spark
:
if (!FileSystem.get(spark.sparkContext.hadoopConfiguration).exists(new Path(path))) {
然而 hadoop filesystem
api似乎并不热衷于此:
Wrong FS: file://target/pipelines/inputData1, expected: file:///
完整堆栈跟踪:
java.lang.IllegalArgumentException:
Wrong FS: file://target/pipelines/inputData1, expected: file:///
at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:649)
at org.apache.hadoop.fs.RawLocalFileSystem.pathToFile(RawLocalFileSystem.java:82)
at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:606)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:824)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:601)
at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:421)
at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1426)
at com.mycompany.DataFrameUtils$.generateParquetFile(DataFrameUtils.scala:71)
所以不可能写入本地相对路径吗?
1条答案
按热度按时间xhv8bpkk1#
要使用hadoopapi访问本地文件系统,必须在冒号后使用single/或/三次
file:/target/pipelines/output.parquet
或者file:///target/pipelines/output.parquet
为了使用相对路径(pwd),如果它通过命令行-下面的命令应该工作。如果您想在scala或java应用程序中使用相同的配置,则需要在驱动程序代码中设置以下配置
file:///
从path变量中,只需给出相对路径。在spark中,可以在spark submit命令行中使用--conf选项和take out覆盖此配置
file:///
从path变量中,只需给出相对路径。