如何从Spark Dataframe中的Row对象获取值?

sap*_*tak 16 apache-spark pyspark spark-dataframe

对于

averageCount = (wordCountsDF
                .groupBy().mean()).head()
Run Code Online (Sandbox Code Playgroud)

我明白了

行(AVG(计数)= 1.6666666666666667)

但是当我尝试:

averageCount = (wordCountsDF
                .groupBy().mean()).head().getFloat(0)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

AttributeError:getFloat ----------------------------------------------- ---------------------------- AttributeError Traceback(最近一次调用last)in()1#TODO:用适当的代码替换--- - > 2 averageCount =(wordCountsDF 3 .groupBy().mean()).head().getFloat(0)4 5 print averageCount

getattr中的 /databricks/spark/python/pyspark/sql/types.py(self,item)1270 引发AttributeError(item)1271
除了ValueError: - > 1272 raise AttributeError(item)1273 1274 def setattr(self,key,value) :

AttributeError:getFloat

我究竟做错了什么?

sap*_*tak 21

我想到了.这将返回我的值:

averageCount = (wordCountsDF
                .groupBy().mean()).head()[0]
Run Code Online (Sandbox Code Playgroud)


Ver*_*eng 12

这也有效:

averageCount = (wordCountsDF
                .groupBy().mean('count').collect())[0][0]
print averageCount
Run Code Online (Sandbox Code Playgroud)


Jef*_*eff 5

Dataframe 行继承自命名元组(来自集合库),因此虽然您可以按照上面的方式像传统元组一样对它们进行索引,但您可能希望通过其字段名称来访问它。毕竟,这就是命名元组的要点,而且它对未来的变化也更加稳健。像这样:

averageCount = wordCountsDF.groupBy().mean().head()['avg(jobs)']
Run Code Online (Sandbox Code Playgroud)