Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算行平均值,忽略Spark Scala中的NAs_Scala_Apache Spark_Dataframe_Aggregation - Fatal编程技术网

计算行平均值,忽略Spark Scala中的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不会到期,因为这将影响分母 我发现了一个类似的问题,但是我的数据框架将有数百列 感谢您的帮助和分享,干杯 通常这类函数默认情况下忽略空值。 即使有一些混合了数值和字符串类型的列,这

我试图找到一种方法来计算Scala中Spark数据帧中行的平均值,在Scala中,我想忽略NAs。在R中,有一个称为rowMeans的非常方便的函数,可以指定忽略NAs:

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上找到直接的方法要快。是的,可能吧。但是,我不确定如何实现这一点,因此我可能需要在数据处理过程中完全跳过这一步。。