2016-11-15 4 views
2

Я новичок в spark.I загрузил файл csv с sc.textFile. Я хочу использовать 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) 
Смежные вопросы