1

spark-sqlを使用してファイルを読み込む必要があり、そのファイルは現在のディレクトリにあります。Spark-SQL:現在のワーカーノードディレクトリにあるファイルにアクセスする

このコマンドを使用して、HDFSに保存されているファイルのリストを解凍します。

val decompressCommand = Seq(laszippath, "-i", inputFileName , "-o", "out.las").!! 

ファイルは、現在のワーカーノード・ディレクトリーに出力され、スカラ座を通じて"ls -a"!!を実行し、私はファイルがあることがわかりますので、私はこれを知っています。私は、次のコマンドでそれにアクセスしよう:

val dataFrame = sqlContext.read.las("out.las") 

私は、SQLコンテキストが現在のディレクトリ内のファイルを検索しようとすると仮定し、それはしません。また、エラーは発生しませんが、ファイルが見つからないという警告が表示されます(スパークが実行され続けます)。

sparkContext.addFile("out.las")を使用してファイルを追加しようとしましたが、val location = SparkFiles.get("out.las")を使用してその場所にアクセスしましたが、これも機能しませんでした。

私はコマンドval locationPt = "pwd"!!を実行してからval fullLocation = locationPt + "/out.las"を実行してもその値を使用しようとしましたが、どちらも動作しませんでした。

スローされます実際の例外は次のとおりです。

User class threw exception: org.apache.spark.sql.AnalysisException: cannot resolve 'x' given input columns: []; 
org.apache.spark.sql.AnalysisException: cannot resolve 'x' given input columns: [] 

そして、私はデータフレームから列の「x」にアクセスしようとすると、これは起こります。私はHDFSからいくつかのファイルをダウンロードし、ローカルに解凍していくつかのテストを実行したので、列 'X'が存在することを知っています。

私は1.6TBのデータを持っているので、ファイルを1つずつ解凍する必要があるので、一度に解凍して後でアクセスすることはできません。

ワーカーノードディレクトリに出力されているファイルにアクセスするために何ができるか教えてください。それとも、別のやり方でやるべきだろうか?

+0

二重の感嘆符は何ですか? –

+1

反転したコンマのコマンドは、外部システムコマンドとして実行されます。 –

答えて

0

ファイルにアクセスする前にhadoop APIを使用しましたが、ここで役立つ場合は私は気にしません。

val filePath = "/user/me/dataForHDFS/" 
val fs:FileSystem = FileSystem.get(new java.net.URI(filePath + "out.las"), sc.hadoopConfiguration) 

そして私は、以下のテストしていませんでしたが、私は違法ためのScala Javaの配列を渡しているかなり確信しています。しかし、後で何をすべきかのアイデアを伝えるだけです。

var readIn: Array[Byte] = Array.empty[Byte] 
val fileIn: FSDataInputStream = fs.open(file) 
val fileIn.readFully(0, readIn) 
1

私は今それを行うことができました。私がやっていることは、ファイルをHDFSに保存して、hdfsを使ってSQLコンテキストを使ってファイルを取得することです。 HDFSで毎回 "out.las"を上書きして、あまりにも多くのスペースを取らないようにします。

関連する問題