Spark中是否有任何函数可以通过忽略null / NaN来计算DataFrame中列的平均值?与R一样,我们可以传递一个选项,例如na.rm = TRUE。
当我在带有NaN的列上应用avg()时,我只获得NaN。
答案 0 :(得分:4)
您可以执行以下操作:
df.na.drop(Seq("c_name")).select(avg(col("c_name")))
答案 1 :(得分:0)
在所有列中创建一个不包含空值的数据框,以便可以在下一步中计算列均值
require
创建一个列列表,在其中必须将空值替换为列均值,并将该列表称为“ columns_with_nas”
现在遍历列表“ columns_with_nas”,将所有空值替换为计算出的平均值
removeAllDF = df.na.drop()
答案 2 :(得分:-1)
这似乎对我在Spark 2.1.0中起作用:
In [16]: mydesc=[{'name':'Fela', 'age':46},
{'name':'Menelik','age':None},
{'name':'Zara','age':39}]
In [17]: mydf = sc.parallelize(mydesc).toDF()
In [18]: from pyspark.sql.functions import avg
In [20]: mydf.select(avg('age')).collect()[0][0]
Out[20]: 42.5