2016-11-15 1 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) 
관련 문제