web-dev-qa-db-ja.com

Spark Dataframe?のRowオブジェクトから値を取得する方法は?

for

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

私は得る

Row(avg(count)= 1.6666666666666667)

しかし、私がしようとすると:

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

次のエラーが表示されます。

AttributeError:getFloat ----------------------------------------------- ---------------------------- AttributeErrorトレースバック(最後の最後の呼び出し)in()1#TODO:適切なコードで置換--- -> 2 averageCount =(wordCountsDF 3 .groupBy()。mean())。head()。getFloat(0)4 5印刷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

私は何を間違えていますか?

16
saptak

私はそれを考え出した。これは私に値を返します:

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

これも機能します:

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

データフレーム行は、namedtuples(コレクションライブラリから)から継承されるため、上記の方法で従来のTupleのようにインデックスを作成できますが、フィールドの名前でアクセスすることをお勧めします。つまり、結局のところ、名前付きタプルのポイントであり、将来の変更に対してもより堅牢です。このような:

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