2016-07-27 8 views
1

У меня есть Спарк dataframe, который я хочу, чтобы получить статистикуПолучение значения из DataFrame на основе другого значения столбца (PySpark)

stats_df = df.describe(['mycol']) 
stats_df.show() 

+-------+------------------+ 
|summary|    mycol| 
+-------+------------------+ 
| count|    300| 
| mean|    2243| 
| stddev| 319.419860456123| 
| min|    1400| 
| max|    3100| 
+-------+------------------+ 

Как извлечь значения min и max в mycol с помощью summaryminmax значения столбцов? Как это сделать с помощью индекса чисел?

+0

Я уже ответил на этот вопрос [здесь] (http://stackoverflow.com/questions/35272086/spark-1-6-filtering-dataframes-generated-by-describe) – eliasah

+0

@eliasah Может понравиться предоставить решение для Python здесь? Мне сложно перевести ваше решение, поскольку я не знаю Scala. – menorah84

+0

Хорошо, я написал ответ ниже! Если он решает вашу проблему, примите и поддержите :) – eliasah

ответ

2

Хорошо, давайте рассмотрим следующий пример:

from pyspark.sql.functions import rand, randn 
df = sqlContext.range(1, 1000).toDF('mycol') 
df.describe().show() 
# +-------+-----------------+ 
# |summary|   mycol| 
# +-------+-----------------+ 
# | count|    999| 
# | mean|   500.0| 
# | stddev|288.5307609250702| 
# | min|    1| 
# | max|    999| 
# +-------+-----------------+ 

Если вы хотите получить доступ к ряду относительно STDDEV, согласно примеру, вам просто нужно, чтобы преобразовать его в РДУ, собрать его и превратить его в словарь следующим образом:

stats = dict(df.describe().map(lambda r : (r.summary,r.mycol)).collect()) 
print(stats['stddev']) 
# 288.5307609250702 
0

Вы можете легко назначить переменную из выделенной области данных.

x = stats_df.select('mycol').where('summary' == 'min') 
Смежные вопросы