0

Googleクラウドプラットフォームでsparkを使用しています。どうやら filesystem からファイルを読み取っているようですgs://<bucket>/dir/fileが、ログ出力プロンプト

FileNotFoundException: `gs:/bucket/dir/file (そのようなファイルまたはディレクトリは存在しません)

行方不明/は明らかに問題です。どうすればこれを解決できますか?

エラーメッセージ

これは私のコードです:

val files = Array(("call 1","gs://<bucket>/google-cloud-dataproc-metainfo/test/123.wav"))
val splitAudioFiles = sc.parallelize(files.map(x => splitAudio(x, 5, sc)))

def splitAudio(path: (String, String), interval: Int, sc: SparkContext): (String, Seq[(String,Int)]) = {
   val stopWords = sc.broadcast(loadTxtAsSet("gs://<bucket>/google-cloud-dataproc-metainfo/test/stopword.txt")).value
   val keyWords = sc.broadcast(loadTxtAsSet("gs://<bucket>/google-cloud-dataproc-metainfo/test/KeywordList.txt")).value

   val file = new File((path._2))
   val audioTitle = path._1
   val fileFormat: AudioFileFormat = AudioSystem.getAudioFileFormat(file)
   val format = fileFormat.getFormat
4

1 に答える 1

2

gs:// URI をサポートしていない AudioSystem.getAudioFileFormat(URL) を使用しているようです。代わりに、Hadoop FileSystem インターフェイスを使用してファイルの InputStream を取得し、AudioSystem.getAudioFileFormat(InputStream) を利用する必要があります。私はこのようなものがうまくいくはずだと思います:

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.Configuration;

val sc: SparkContext = ...
val urls : RDD[URL] = ...
val formats : RDD[AudioFileFormat] = urls.map(url => {
    val asUri = url.toURI  
    val conf = new Configuration()
    val hadoopPath = new Path(asUri)
    val hadoopFs = hadooPath.getFileSystem(conf)
    val inputStream = hadoopFs.open(hadoopPath)
    AudioSystem.getAudioFileFormat(inputStream)
})
于 2016-03-04T17:18:22.530 に答える