在Scala中,我可以get(#)
或getAs[Type](#)
从数据框中获取值。我该怎么做pyspark
?
我有两列DataFrame:item(string)
和salesNum(integers)
。我做了groupby
和mean
来获得这样的数字的平均值:
saleDF.groupBy("salesNum").mean()).collect()
它有效。现在,我在数据框中有一个值的平均值。
如何从数据框中获取该值以将均值作为浮点数?
答案 0 :(得分:13)
collect()
将您的结果作为python列表返回。要从列表中获取值,您只需要采用第一个元素:
saleDF.groupBy("salesNum").mean()).collect()[0]
答案 1 :(得分:1)
准确地说,collect
返回一个列表,其元素类型为class 'pyspark.sql.types.Row'
。
要提取实际价值,您应该执行以下操作:
saleDF.groupBy("salesNum").mean()).collect()[0]["avg(yourColumnName)"]
其中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'>
>>>
>>>
答案 2 :(得分:1)
我们也可以在这里使用"user-data-dir"
。
"~/.config/google-chrome"