2016-10-12 2 views
0

Я использую некоторые pyspark.sql.functions:Как извлечь значение из pyspark.sql.function?

print(ratings.select(mean('rating')).take(1)) 
print(ratings.select(stddev('rating')).take(1)) 

Выход является:

[Row(avg(rating)=3.581564453029317)] 
[Row(stddev_samp(rating,0,0)=1.1171018453732544)] 

Как извлечь значение, так что я могу присвоить его переменной, например

mean_ratings = ratings.select(mean('rating')) 

ответ

2

Take возвращает список строк. Индекс в список, чтобы получить первый ряд, затем вытащите поле, которое вы ищете:

mean_ratings = ratings.select(mean('rating')).take(1)[0]['avg(rating)'] 
+0

Спасибо, Дэвид. Я думал о том, чтобы сделать что-то подобное, но он «чувствовал» немного хрупкий, особенно версию stddev. –

+0

Да, это определенно взломано. Вы также можете преобразовать строку в dict, используя '.asDict()'. Они могут чувствовать себя более комфортно/стабильно в использовании, особенно в ситуациях, когда у вас есть более одного ключа в вашем столбце https://spark.apache.org/docs/2.0.1/api/python/pyspark.sql.html#pyspark .sql.Row.asDict – David