从数据框中获取价值

M.R*_*Rez 9 python type-conversion apache-spark-sql pyspark

在Scala中,我可以做get(#)getAs[Type](#)从数据帧中获取值.我应该怎么做pyspark

我有两列DataFrame:item(string)salesNum(integers).我做了一个groupbymean得到这样的数字的平均值:

saleDF.groupBy("salesNum").mean()).collect()

它的工作原理.现在我在数据框中有一个值的平均值.

如何从数据框中获取该值以将均值作为浮点数?

Fra*_*Boi 25

准确地说,collect返回一个元素类型为 的列表class 'pyspark.sql.types.Row'

在您提取实际价值的情况下,您应该执行以下操作:

saleDF.groupBy("salesNum").mean()).collect()[0]["avg(yourColumnName)"]
Run Code Online (Sandbox Code Playgroud)

其中yourColumnName是您要取平均值的列的名称(pyspark,在应用平均值时,默认情况下以这种方式重命名结果列)。

例如,我运行了以下代码。查看每个步骤的类型和输出。

>>> columns = ['id', 'dogs', 'cats', 'nation']
>>> vals = [
...      (2, 0, 1, 'italy'),
...      (1, 2, 0, 'italy'),
...      (3, 4, 0, 'france')
... ]
>>> df = sqlContext.createDataFrame(vals, columns)
>>> df.groupBy("nation").mean("dogs").collect()
[Row(nation=u'france', avg(dogs)=4.0), Row(nation=u'italy', avg(dogs)=1.0)]
>>> df.groupBy("nation").mean("dogs").collect()[0]
Row(nation=u'france', avg(dogs)=4.0))
>>> df.groupBy("nation").mean("dogs").collect()[0]["avg(dogs)"]
4.0
>>> type(df.groupBy("nation").mean("dogs").collect())
<type 'list'>
>>> type(df.groupBy("nation").mean("dogs").collect()[0])
<class 'pyspark.sql.types.Row'>
>>> type(df.groupBy("nation").mean("dogs").collect()[0]["avg(dogs)"])
<type 'float'>
>>> 
>>>     
Run Code Online (Sandbox Code Playgroud)


Dav*_*vid 21

collect()将结果作为python列表返回.要从列表中获取值,您只需要采用第一个元素:

saleDF.groupBy("salesNum").mean()).collect()[0] 
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,对于RDD,它是一个二维列表,因此我可以使用[0] [0]? (2认同)

小智 8

我们也可以在这里使用first()

saleDF.groupBy("salesNum").mean()).first()[0]
Run Code Online (Sandbox Code Playgroud)