2016-09-26 9 views
0

スパークRDDはsaveAsTxtFileの機能を持っています。しかし、どのようにファイルを開き、単純な文字列をハープストアに書き込むのですか?Sparkでは、RDDなしでHadoopにファイルを書き込むにはどうすればよいですか?

val sparkConf: SparkConf = new SparkConf().setAppName("example") 
val sc: SparkContext = new SparkContext(sparkConf) 

sc.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "...") 
sc.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "...") 

val lines: RDD[String] = sc.textFile("s3n://your-output-bucket/lines.txt") 
val lengths: RDD[Int] = lines.map(_.length) 
lengths.saveAsTextFile("s3n://your-output-bucket/lenths.txt") 

val numLines: Long = lines.count 
val resultString: String = s"numLines: $numLines" 
// how to save resultString to "s3n://your-output-bucket/result.txt" 

sc.stop() 

答えて

1

エルス

val strings = sc.parallelize(Seq("hello", "there"), <numPartitions>) 
strings.saveAsTextFile("<path-to-file>") 

ファイルを書いて、あなたのドライバから明示的にそのコードを呼び出すためのHadoop APIを見てする必要があるかもしれません。

1

あなたはscにバインドSparkContextを持っていると仮定すると:

import java.io.{BufferedWriter, OutputStreamWriter} 

val hdfs = org.apache.hadoop.fs.FileSystem.get(sc.hadoopConfiguration) 

val outputPath = 
    new org.apache.hadoop.fs.Path("hdfs://localhost:9000//tmp/hello.txt") 

val overwrite = true 

val bw = 
    new BufferedWriter(new OutputStreamWriter(hdfs.create(outputPath, overwrite))) 
bw.write("Hello, world") 
bw.close() 

注:例外の場合にはライターをクローズするコードがないそれをシンプルに保つために。

+0

thx。 "hdfs:// localhost:9000 // tmp/hello.txt"の代わりに "s3n://your-output-bucket/result.txt"というURLを使用できますか? –

関連する問題