Scala ApacheSpark:reduceByKey的自定义函数-缺少方法的参数
我正在尝试规范化数据集(将向量中所有属性的值转换为“0-1”范围)。 我为数据集中的所有记录创建了一个元组RDD(attrib name,attrib value),如下所示:Scala ApacheSpark:reduceByKey的自定义函数-缺少方法的参数,scala,apache-spark,rdd,normalize,Scala,Apache Spark,Rdd,Normalize,我正在尝试规范化数据集(将向量中所有属性的值转换为“0-1”范围)。 我为数据集中的所有记录创建了一个元组RDD(attrib name,attrib value),如下所示: val attribMap : RDD[(String,DoubleDimension)] = contactDataset.flatMap( contact => { List(
val attribMap : RDD[(String,DoubleDimension)] = contactDataset.flatMap(
contact => {
List(
("dage",contact.dage match { case Some(value) => DoubleDimension(value) ; case None => null }),
("dancstry1",contact.dancstry1 match { case Some(value) => DoubleDimension(value) ; case None => null }),
("dancstry2",contact.dancstry2 match { case Some(value) => DoubleDimension(value) ; case None => null }),
("ddepart",contact.ddepart match { case Some(value) => DoubleDimension(value) ; case None => null }),
("dhispanic",contact.dhispanic match { case Some(value) => DoubleDimension(value) ; case None => null }),
("dhour89",contact.dhour89 match { case Some(value) => DoubleDimension(value) ; case None => null })
)
}
)
def getMax( a : DoubleDimension, b : DoubleDimension ) : DoubleDimension = {
if (a > b) a
else b
}
def getMin( a : DoubleDimension, b : DoubleDimension) : DoubleDimension = {
if (a < b) a
else b
}
这里,contactDataset的类型为RDD[Contact]。Contact类的字段类型为Option[Long]
DoubleDimension是双数据类型上的简单包装器。它扩展了有序特征,实现了相应的比较方法和等价方法
要获得用于计算归一化值的最大和最小属性向量
maxVector = attribMap.reduceByKey( getMax )
minVector = attribMap.reduceByKey( getMin )
getMax和getMin的实现如下:
val attribMap : RDD[(String,DoubleDimension)] = contactDataset.flatMap(
contact => {
List(
("dage",contact.dage match { case Some(value) => DoubleDimension(value) ; case None => null }),
("dancstry1",contact.dancstry1 match { case Some(value) => DoubleDimension(value) ; case None => null }),
("dancstry2",contact.dancstry2 match { case Some(value) => DoubleDimension(value) ; case None => null }),
("ddepart",contact.ddepart match { case Some(value) => DoubleDimension(value) ; case None => null }),
("dhispanic",contact.dhispanic match { case Some(value) => DoubleDimension(value) ; case None => null }),
("dhour89",contact.dhour89 match { case Some(value) => DoubleDimension(value) ; case None => null })
)
}
)
def getMax( a : DoubleDimension, b : DoubleDimension ) : DoubleDimension = {
if (a > b) a
else b
}
def getMin( a : DoubleDimension, b : DoubleDimension) : DoubleDimension = {
if (a < b) a
else b
}
def getMax(a:DoubleDimension,b:DoubleDimension):DoubleDimension={
如果(a>b)a
其他b
}
def getMin(a:DoubleDimension,b:DoubleDimension):DoubleDimension={
如果(a
我在调用getMax和getMin方法时遇到编译错误,声明:
[错误]…/com/ameyam/input_generator/DatasetReader.scala:117:错误:类DatasetReader中的getMax方法缺少参数
[错误]如果要将此方法视为部分应用的函数,请使用带“\u1”的方法
[错误]maxVector=attribMap.reduceByKey(getMax)
[错误]…/com/ameyam/input_generator/DatasetReader.scala:118:错误:类DatasetReader中的getMin方法缺少参数
[错误]如果要将此方法视为部分应用的函数,请使用带“\u1”的方法
[错误]minVector=attribMap.reduceByKey(getMin)
我不确定我在这里做错了什么。我的RDD是成对的RDD,据我所知,我可以向它传递任何方法,只要函数的类型是f:(V,V)=>V
我真的被困在这里了。请提供帮助。我刚刚运行了一个简化版本,没有问题……您的代码中是否有另一个getMax或getMin?在方法名称后附加一个
\u
是否有效(在调用站点)?