Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
如何在Scala-ApacheSpark中查找数组中值的平均值_Scala_Apache Spark_Rdd - Fatal编程技术网

如何在Scala-ApacheSpark中查找数组中值的平均值

如何在Scala-ApacheSpark中查找数组中值的平均值,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,我有一个值数组,如下所示: scala> number.take(5) res1: Array[Any] = Array(908.76, 901.74, 83.71, 39.36, 234.64) 我需要使用RDD方法找到数组的平均值 我尝试过使用number.mean()方法,但它总是给我以下错误: error: could not find implicit value for parameter num: Numeric[Any] 我是Spark的新手,请提供一些建议。谢谢。这

我有一个值数组,如下所示:

scala> number.take(5)

res1: Array[Any] = Array(908.76, 901.74, 83.71, 39.36, 234.64)
我需要使用RDD方法找到数组的平均值

我尝试过使用number.mean()方法,但它总是给我以下错误:

error: could not find implicit value for parameter num: Numeric[Any]

我是Spark的新手,请提供一些建议。谢谢。

这与火花无关。编译器给您一个提示-数组[Any]没有.mean()方法,因为它要求数组的元素必须是数字

这意味着,如果它是一个Double或int数组,那么它就可以工作

number.take(5)
返回数组[Any],因为在它上面的某个地方,您不能保证数组只包含数字元素

如果您不能提供这种保证,那么您必须映射到该数组,并显式地将所有这些值转换为您选择的Double或其他数字类型

隐式类AnyExtended(值:Any){
def toDoubleO:选项[双精度]={
Try(value.toDouble).t选项
}
}
val数组:数组[Double]=number.take(5).flatMap(u.toDoubleO)
val-mean:Double=array.mean

请注意,我没有使用basic
.toDouble
而是编写了隐式扩展,因为
.toDouble
可能会失败并引发异常。相反,我们可以将其包装为Try并转换为
选项
——在异常情况下,我们将得到
,由于
平面图
与火花无关,因此该值将从平均值计算中跳过。编译器给您一个提示-数组[Any]没有.mean()方法,因为它要求数组的元素必须是数字

这意味着,如果它是一个Double或int数组,那么它就可以工作

number.take(5)
返回数组[Any],因为在它上面的某个地方,您不能保证数组只包含数字元素

如果您不能提供这种保证,那么您必须映射到该数组,并显式地将所有这些值转换为您选择的Double或其他数字类型

隐式类AnyExtended(值:Any){
def toDoubleO:选项[双精度]={
Try(value.toDouble).t选项
}
}
val数组:数组[Double]=number.take(5).flatMap(u.toDoubleO)
val-mean:Double=array.mean

请注意,我没有使用basic
.toDouble
而是编写了隐式扩展,因为
.toDouble
可能会失败并引发异常。相反,我们可以将其包装为Try并转换为
选项
——在出现异常的情况下,我们将得到
,并且由于
平面图

的原因,该值将从平均值的计算中跳过。如果您愿意转换为DF,则spark将以最小的努力为您完成此操作

val number=List(908.76、901.74、83.71、39.36、234.64)
val numberRDD=sc.parallelize(数字)
编号toDF(“x”).agg(平均(列(“x”))
res1.show

这将产生答案433.642

如果您愿意转换为DF,则spark将以最小的努力为您完成此操作

val number=List(908.76、901.74、83.71、39.36、234.64)
val numberRDD=sc.parallelize(数字)
编号toDF(“x”).agg(平均(列(“x”))
res1.show

这将产生答案433.642

这里的
number
是什么?最好将其更改为不返回/包含
Any
类型,而是直接使用双精度。这里的
number
是什么?最好将其更改为不返回/包含任何类型,而是直接使用双精度。@natg如果这些答案中的任何一个对您有帮助,请您接受其中一个作为答案并“向上投票”。只需单击您认为对您帮助最大的答案旁边的灰色小“复选标记”。@natg如果这些答案中有任何一个对您有帮助,请您接受其中一个作为答案并“投赞成票”。只需单击您认为对您帮助最大的答案旁边的灰色小“复选标记”。