2015-05-26 2 views
0

У меня есть RDD, который я сейчас группирую и вычисляю базовую описательную статистику (count, sum, std, mean и т. Д.) С помощью combByKey. Он отлично работает, но похоже, что функция RDD.stats() будет делать то, что мне нужно.Вызов .stats() для сгруппированных RDD (Spark)

Прямо сейчас, я делаю следующее:

text_file = sc.textFile(input_source_file) 
text_file.flatMap(zonal.zonal_stats)\ 
     .combineByKey(first_combiner, new_merge, final_combine)\ 
     .map(lambda (label, (value_sum, count, mx, mn)): "{},{},{},{},{},{},{}".format(label, value_sum, count, value_sum/count, mx, mn, mx - mn))\ 
     .saveAsTextFile(output_path) 

Как я могу заменить combineByKey с неработающей коробки .stats() функции и получить основные статистические данные обратно для каждой группы?

+0

Не могли бы вы поделиться больше кода? Какой у вас первый_комбинатор, new_merge, final_combine? – artemdevel

ответ

0

Функция статистики в Double RDD не определяется для каждой группы. Я хотел бы предложить вместо этого использовать Spark SQL DataFrames, поскольку они имеют функции агрегирования статистической статистики, определенные для сгруппированных данных.

Другим вариантом будет сделать вашу собственную редукционную логику, аналогичную тому, как stats() определяется с использованием класса StatsCounter.

Смежные вопросы