web-dev-qa-db-fra.com

Comment obtenir une valeur de l'objet Row dans Spark Dataframe?

for

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

Je reçois

Ligne (moyenne (nombre) = 1,6666666666666667)

mais quand j'essaye:

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

J'obtiens l'erreur suivante:

AttributeError: getFloat ----------------------------------------------- ---------------------------- AttributeError Traceback (dernier appel le plus récent) dans () 1 # TODO: Remplacer par le code approprié --- -> 2 averageCount = (wordCountsDF 3 .groupBy (). Mean ()). Head (). GetFloat (0) 4 5 print averageCount

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

AttributeError: getFloat

Qu'est-ce que je fais mal?

16
saptak

Je l'ai compris. Cela me rendra la valeur:

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

Cela fonctionne également:

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

Les lignes de trame de données sont héritées des éléments nommés (de la bibliothèque des collections), donc bien que vous puissiez les indexer comme un Tuple traditionnel comme vous l'avez fait ci-dessus, vous voudrez probablement y accéder par le nom de ses champs. C'est, après tout, l'intérêt des tuples nommés, et il est également plus robuste aux changements futurs. Comme ça:

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