如何在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如果这些答案中有任何一个对您有帮助,请您接受其中一个作为答案并“投赞成票”。只需单击您认为对您帮助最大的答案旁边的灰色小“复选标记”。