2017-04-07 27 views
0

根據以下例外情況,我無法使用帶有TextIO和本地文件的通配符「*」,因爲底層庫似乎不支持它。如果我使用Google Cloud存儲路徑,該代碼可以正常使用通配符。我需要以任何方式逃避通配符嗎?本地文件上的Apache Beam TextIO通配符

java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:498) 
     at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:293) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.nio.file.InvalidPathException: Illegal char <*> at index 36: C:\input\* 
     at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182) 
     at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153) 
     at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77) 
     at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94) 
     at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255) 
     at java.nio.file.Paths.get(Paths.java:84) 
     at org.apache.beam.sdk.util.FileIOChannelFactory.specToFile(FileIOChannelFactory.java:81) 
     at org.apache.beam.sdk.util.FileIOChannelFactory.match(FileIOChannelFactory.java:92) 
     at my.package.XmlRawIO$Read$Bound.expand(XmlRawIO.java:235) 
     at my.package.XmlRawIO$Read$Bound.expand(XmlRawIO.java:151) 
     at org.apache.beam.sdk.Pipeline.applyInternal(Pipeline.java:475) 
     at org.apache.beam.sdk.Pipeline.applyTransform(Pipeline.java:389) 
     at org.apache.beam.sdk.values.PBegin.apply(PBegin.java:47) 
     at org.apache.beam.sdk.Pipeline.apply(Pipeline.java:160) 
     at my.package.PushEnactorTransactions.main(PushTransactions.java:70) 
     ... 6 more 

回答

1

從歷史上看,支持Apache Beam中的本地文件系統不支持Windows操作系統上的模式匹配。這並不適用於其他任何情況 - 其他操作系統上的本地文件系統,任何操作系統上的Google雲存儲等都按預期工作。

最近在這方面有很多改進,還有一些進展中。我相信這個特定的例外是固定的,所以我鼓勵再試一次更新的版本。