2016-06-23 14 views
9

dlaJak uzyskać wartość z obiektu wiersza w Dataframe Spark?

averageCount = (wordCountsDF 
       .groupBy().mean()).head() 

uzyskać

Row(avg(count)=1.6666666666666667)

ale gdy próbuję:

averageCount = (wordCountsDF 
       .groupBy().mean()).head().getFloat(0) 

pojawia się następujący błąd:

AttributeError: getFloat --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) in() 1 # TODO: Replace with appropriate code ----> 2 averageCount = (wordCountsDF 3 .groupBy().mean()).head().getFloat(0) 4 5 print averageCount

/databricks/spark/python/pyspark/sql/types.py in getattr(self, item) 1270 raise AttributeError(item) 1271
except ValueError: -> 1272 raise AttributeError(item) 1273 1274 def setattr(self, key, value):

AttributeError: getFloat

Co robię źle?

Odpowiedz

18

Wymyśliłem to. Zwróci mi wartość:

averageCount = (wordCountsDF 
       .groupBy().mean()).head()[0] 
1

Dataframe wiersze są dziedziczone od namedtuples (od bibliotecznych), więc póki możesz Indeks je jak tradycyjne krotka droga zrobiłeś powyżej, prawdopodobnie chcesz uzyskać do niego dostęp przez nazwy jej pól. To jest przecież kwestia nazwanych krotek, a także jest bardziej odporna na przyszłe zmiany. Tak:

averageCount = wordCountsDF.groupBy().mean().head()['avg(jobs)'] 
7

Działa to również:

averageCount = (wordCountsDF 
       .groupBy().mean('count').collect())[0][0] 
print averageCount