получить значение из фрейма данных

В Scala я могу сделатьget(#) или жеgetAs[Type](#) чтобы получить значения из кадра данных. Как я должен сделать это вpyspark?

У меня есть два столбца DataFrame:item(string) а такжеsalesNum(integers), Я делаюgroupby а такжеmean чтобы получить среднее из этих чисел, как это:

saleDF.groupBy("salesNum").mean()).collect()

и это работает. Теперь у меня есть среднее значение в кадре данных с одним значением.

Как я могу получить это значение из фрейма данных, чтобы получить среднее значение как число с плавающей запятой?

Ответы на вопрос(2)

Решение Вопроса

collect() возвращает ваши результаты в виде списка Python. Чтобы получить значение из списка, вам просто нужно взять первый элемент, подобный этому:

saleDF.groupBy("salesNum").mean()).collect()[0] 
 M.Rez28 июн. 2016 г., 11:12
разработка в ipython не дает мне обхода кода, поэтому я могу узнать больше, углубившись в исходный код или что-то похожее на то, что предлагает ide.
 M.Rez28 июн. 2016 г., 11:10
Спасибо, а в случае с RDD это двумерный список, поэтому я мог бы использовать [0] [0]?

Точнееcollect возвращает список, элементы которого имеют типclass 'pyspark.sql.types.Row'.

В вашем случае, чтобы извлечь реальную стоимость, вы должны сделать:

saleDF.groupBy("salesNum").mean()).collect()[0]["avg(yourColumnName)"]

гдеyourColumnName это имя столбца, для которого вы берете среднее значение (pyspark при применении среднего значения, по умолчанию переименуйте получившийся столбец таким образом).

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

>>> columns = ['id', 'dogs', 'cats', 'nation']
>>> vals = [
...      (2, 0, 1, 'italy'),
...      (1, 2, 0, 'italy'),
...      (3, 4, 0, 'france')
... ]
>>> df = sqlContext.createDataFrame(vals, columns)
>>> df.groupBy("nation").mean("dogs").collect()
[Row(nation=u'france', avg(dogs)=4.0), Row(nation=u'italy', avg(dogs)=1.0)]
>>> df.groupBy("nation").mean("dogs").collect()[0]
Row(nation=u'france', avg(dogs)=4.0))
>>> df.groupBy("nation").mean("dogs").collect()[0]["avg(dogs)"]
4.0
>>> type(df.groupBy("nation").mean("dogs").collect())
<type 'list'>
>>> type(df.groupBy("nation").mean("dogs").collect()[0])
<class 'pyspark.sql.types.Row'>
>>> type(df.groupBy("nation").mean("dogs").collect()[0]["avg(dogs)"])
<type 'float'>
>>> 
>>>     

Ваш ответ на вопрос