2016-11-15 9 views
2

私はスパークするのが新しいです。私はsc.textFileとcsvファイルをロードしました。 reduceByKeyを使用して、文字列型の数値を含む列を合計します。 私はこのようなものを試してみると、reduceByKey(_ + _)はちょうどお互いの隣に数字を置きます。 どうすればいいですか?列を変換する必要がありますか?rdd形式の文字列を合計するにはどうすればよいですか?

+0

あなたのプログラムがどこにあるの? – Sachith

+0

のエラーが発生しました。列型を 'Int'のようなより関連性の高い型に変更できませんか?強い型付けされた値を持つことは一般的な良い方法であり、ここで問題を大幅に簡素化します。 –

答えて

3

あなたは、たとえば、文字列を解析する必要があります。

scala> val rdd = sc.parallelize(Seq(("a", "1"), ("a", "2.7128"), ("b", "3.14"), 
     ("b", "4"), ("b", "POTATO"))) 
rdd: org.apache.spark.rdd.RDD[(String, String)] = ParallelCollectionRDD[57] at parallelize at <console>:27 

scala> def parseDouble(s: String) = try { Some(s.toDouble) } catch { case _ => None } 
parseDouble: (s: String)Option[Double] 

scala> val reduced = rdd.flatMapValues(parseDouble).reduceByKey(_+_) 
reduced: org.apache.spark.rdd.RDD[(String, Double)] = ShuffledRDD[59] at reduceByKey at <console>:31 

scala> reduced.collect.foreach{println} 
(a,3.7128) 
(b,7.140000000000001) 
関連する問題