计算行平均值,忽略Spark Scala中的NAs
我试图找到一种方法来计算Scala中Spark数据帧中行的平均值,在Scala中,我想忽略NAs。在R中,有一个称为rowMeans的非常方便的函数,可以指定忽略NAs:计算行平均值,忽略Spark Scala中的NAs,scala,apache-spark,dataframe,aggregation,Scala,Apache Spark,Dataframe,Aggregation,我试图找到一种方法来计算Scala中Spark数据帧中行的平均值,在Scala中,我想忽略NAs。在R中,有一个称为rowMeans的非常方便的函数,可以指定忽略NAs: rowmeans(df,na.rm=TRUE) 我找不到Spark Dataframes的对应函数,我想知道是否有人对此有建议或意见。将其替换为0不会到期,因为这将影响分母 我发现了一个类似的问题,但是我的数据框架将有数百列 感谢您的帮助和分享,干杯 通常这类函数默认情况下忽略空值。 即使有一些混合了数值和字符串类型的列,这
rowmeans(df,na.rm=TRUE)
我找不到Spark Dataframes的对应函数,我想知道是否有人对此有建议或意见。将其替换为0不会到期,因为这将影响分母
我发现了一个类似的问题,但是我的数据框架将有数百列
感谢您的帮助和分享,干杯 通常这类函数默认情况下忽略空值。 即使有一些混合了数值和字符串类型的列,这个列也会删除字符串和空值,并且只计算数值
df.select(df.columns.map(c => mean(col(c))) :_*).show
您可以通过首先确定哪些字段是数字字段,然后为每行选择它们的平均值来完成此操作
import org.apache.spark.sql.types._
val df = List(("a",1,2,3.0),("b",5,6,7.0)).toDF("s1","i1","i2","i3")
// grab numeric fields
val numericFields = df.schema.fields.filter(f => f.dataType==IntegerType || f.dataType==LongType || f.dataType==FloatType || f.dataType==DoubleType || f.dataType==ShortType).map(_.name)
// compute mean
val rowMeans = df.select(numericFields.map(f => col(f)).reduce(_+_) / lit(numericFields.length) as "row_mean")
rowMeans.show
谢谢你的意见。然而,我正在寻找一种方法来计算dataframe.Sry中行的平均值,我把行和列混淆了。那么对于行来说也很容易。首先我们用0填充空值,然后计算平均值列。val df_filled=df.na.filled(“0”);val nrow=n;val sumDF=df_filled.withColumn(“总计”,df_filled.columns.map(c=>col(c)).reduce((c1,c2)=>(c1+c2)/nrow));嗨,是的,那会管用的,但正如我所说的那样;如果我们用零填充NAs,这将影响分母,使计算出的平均值有偏差,如果我假设这是如何计算的话。在我的例子中,我将有大约1500个列需要求和,这使得用reduce语句很难确定哪些列需要求和。因此,总而言之,我需要对行进行求和,并计算NAs在大量列中未考虑的平均值。简单的事情,但同时不是……对。我想迭代地收集到R并计算每个批的行平均值比在scala上找到直接的方法要快。是的,可能吧。但是,我不确定如何实现这一点,因此我可能需要在数据处理过程中完全跳过这一步。。