Apache Spark:reduceByKey的自定义函数 - 缺少方法的参数

时间:2015-07-10 01:00:21

标签: scala apache-spark rdd normalize

我正在尝试规范化数据集(将向量中的所有属性的值转换为" 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;诉

我真的被困在这里了。请帮忙。

0 个答案:

没有答案
相关问题