将列的Null值替换为Spark DataFrame中的平均值

时间:2017-09-17 05:15:21

标签: apache-spark pyspark apache-spark-sql

Spark中是否有任何函数可以通过忽略null / NaN来计算DataFrame中列的平均值?与R一样,我们可以传递一个选项,例如na.rm = TRUE。

当我在带有NaN的列上应用avg()时,我只获得NaN。

3 个答案:

答案 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