2016-09-14 185 views
0

我编写的scala代码给了我数据类型错误。 testpredict_02的主要方法是Double。Spark Scala - 将一个记录和一列的Dataframe转换为Double

val featuresMD = hiveContext.read.parquet("hdfs://machine01:9000/models/nb/metadata/features") 

def testpredict_02(VData: Vector) = { MyModel.predict(VData) } 

def outerpredict_02(argincome: String,argage: String,arggender: String) = { 
featuresMD.registerTempTable("features_md") 

val income = hiveContext.sql("select distinct income_index from features_md where income = argincome") 
val age  = hiveContext.sql("select distinct age_index from features_md where age = argage") 
val gender = hiveContext.sql("select distinct gender_index from features_md where gender = arggender") 

testpredict_02(Vectors.dense(income.select("income_index"), age.select("age_index"), gender.select("gender_index"))) 

Error : 
<console>:43: error: type mismatch; 
found : org.apache.spark.sql.DataFrame 
required: Double 
       testpredict_02(Vectors.dense(income.select("income_index"), age.select("age_index"))) 

请帮助..

+0

'income.select(“income_index”)'返回'Dataframe',而不是'Double'。所以'Vectors.dense(...)'创建了一个3个数据帧的向量 - 我敢肯定,这不是你想要的,并且没有任何用处。 “MyModel.predict”期待什么类型? –

+0

谢谢Tzach。 MyModel.predict期望DOUBLE的向量。 income.select( “income_index”) RES2:org.apache.spark.sql.DataFrame = [income_index:双] age.select( “age_index”) RES1:org.apache.spark.sql.DataFrame由于age.select(“age_index”)和income.select(“income_index”)返回sql.DataFrame,我遇到这个问题,因此列数据类型为Double。有没有其他的方法可以只取得列值。 –

+0

但是每个Dataframe都包含_many_双打 - 一个Dataframe是一个分布式的记录集合...您需要哪一个?第一?任何?所有?如果“全部” - 如果3个数据帧没有相同数量的记录会怎么样?你将如何构建这些值的向量?看起来你需要重新设计整个事物 - 这似乎不是一个正确的使用Spark ... –

回答

1

如果你确定每个3个Dataframes包含一列和一个记录,你可以得到的第一条记录的第一列他们每个人:

def getFirstCell(df: DataFrame): Double = df.first().getAs[Double](0) 

val vector: Vector = Vectors.dense(
    getFirstCell(income.select("income_index")), 
    getFirstCell(age.select("age_index")), 
    getFirstCell(gender.select("gender_index")) 
) 

testpredict_02(vector) 
+0

我要试试这个,让你知道Tzach。再一次感谢你。 –

+0

三个动作获取单个矢量?这是一个矫枉过正的,你不觉得:) – zero323

+0

@Tzach,该提示工作。谢谢。 zero323,Tzach,我知道设计是不正确的,将工作。截至目前,我需要做一个快速POC并测试整个想法。谢谢。 –

相关问题