2017-06-15 3 views
1

Spark/Scalaを使用してHDFSのファイルを読み書きする方法を学習しています。 HDFSファイルに書き込めません。ファイルは作成されていますが、空です。 ファイルに書き込むループを作成する方法がわかりません。Spark/Scalaを使用してHDFSファイルの繰り返し書き込みを使用する

コードは次のとおりです。

import scala.collection.immutable.Map 
import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 
import org.apache.spark.SparkContext._ 

// Read the adult CSV file 
    val logFile = "hdfs://zobbi01:9000/input/adult.csv" 
    val conf = new SparkConf().setAppName("Simple Application") 
    val sc = new SparkContext(conf) 
    val logData = sc.textFile(logFile, 2).cache() 


    //val logFile = sc.textFile("hdfs://zobbi01:9000/input/adult.csv") 
    val headerAndRows = logData.map(line => line.split(",").map(_.trim)) 
    val header = headerAndRows.first 
    val data = headerAndRows.filter(_(0) != header(0)) 
    val maps = data.map(splits => header.zip(splits).toMap) 
    val result = maps.filter(map => map("AGE") != "23") 

    result.foreach{ 

     result.saveAsTextFile("hdfs://zobbi01:9000/input/test2.txt") 
    } 

私が交換する場合: result.foreach{println}

を次に、それは働きます!

けど(saveAsTextFile)の方法を使用した場合、エラーメッセージが

<console>:76: error: type mismatch; 
found : Unit 
required: scala.collection.immutable.Map[String,String] => Unit 
      result.saveAsTextFile("hdfs://zobbi01:9000/input/test2.txt") 

としてスローされるすべてのヘルプしてください。

答えて

1
result.saveAsTextFile("hdfs://zobbi01:9000/input/test2.txt") 

これはすべて必要な作業です。すべての行をループする必要はありません。

希望すると便利です。

+0

これが役に立った場合、これを回答として受け入れることができますか? –

1

これは何ですか?

result.foreach{ 
    result.saveAsTextFile("hdfs://zobbi01:9000/input/test2.txt") 
} 

RDD actionは特別confに設定しない限り、RDD transformationsからトリガすることはできません。

result.saveAsTextFile("hdfs://zobbi01:9000/input/test2.txt")を使用してHDFSに保存してください。

私はファイルに書かれるべき他のフォーマットが必要です。書き込む前にrdd自体を変更してください。

+0

他の回答との違いは何ですか? –

+0

おめでとうございます! Yuは最初に答えた! :) 私はタブを開いたとき、私はあなたが答えを参照してください。これはとにかく質問を助けるものではありません。 –

+0

多くのありがとう。できます。私が実際に(test2.txt)に保存したとき、ファイルであると思っていたのは間違いでした。確かに、それはフォルダなので、私は(test2)に変更しました。 –

関連する問題