我正在尝试规范化数据集(将向量中的所有属性的值转换为" 0-1和#34;范围)。 我为数据集中的所有记录创建了元组的RDD(attrib-name,attrib-value),如下所示:
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 })
)
}
)
此处,contactDataset的类型为RDD [Contact]。 Contact类的字段类型为Option [Long]。
DoubleDimension是Double数据类型的简单包装器。它扩展了Ordered trait并实现了相应的compare方法和equals方法。
获取用于计算标准化值的max和min属性向量,
maxVector = attribMap.reduceByKey( getMax )
minVector = attribMap.reduceByKey( getMin )
getMax和getMin的实现如下:
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
}
我在调用方法getMax和getMin时遇到编译错误:
[错误] ... / com / ameyamm / input_generator / DatasetReader.scala:117:错误:在类DatasetReader中缺少方法getMax的参数;
[错误]使用&#39; _&#39;如果你想把它当作部分应用的功能
[错误] maxVector = attribMap.reduceByKey(getMax)
[ERROR] ... / com / ameyamm / input_generator / DatasetReader.scala:118:错误:在类DatasetReader中缺少方法getMin的参数;
[错误]使用&#39; _&#39;如果你想把它当作部分应用的功能
[错误] minVector = attribMap.reduceByKey(getMin)
我不确定我在这里做错了什么。我的RDD是对的RDD,据我所知,只要函数的类型为f,我就可以传递任何方法:(V,V)=&gt;诉
我真的被困在这里了。请帮忙。