2016-06-23 39 views
9

perCome ottenere un valore dall'oggetto Row in Spark Dataframe?

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

ottengo

Row(avg(count)=1.6666666666666667)

ma quando provo:

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

ottengo il seguente errore:

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

Che cosa sto facendo di sbagliato?

risposta

18

L'ho capito. Questo mi restituirà il valore:

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

righe dataframe sono ereditate da namedtuples (dalla libreria collezioni), così mentre è possibile indicizzare loro come una tupla tradizionale il modo in cui avete fatto in precedenza, probabilmente avrete bisogno di accedervi il nome dei suoi campi. Questo è, dopo tutto, il punto delle tuple nominate, ed è anche più robusto per i cambiamenti futuri. Come questo:

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

questo funziona anche:

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