我编写的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")))
请帮助..
'income.select(“income_index”)'返回'Dataframe',而不是'Double'。所以'Vectors.dense(...)'创建了一个3个数据帧的向量 - 我敢肯定,这不是你想要的,并且没有任何用处。 “MyModel.predict”期待什么类型? –
谢谢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。有没有其他的方法可以只取得列值。 –
但是每个Dataframe都包含_many_双打 - 一个Dataframe是一个分布式的记录集合...您需要哪一个?第一?任何?所有?如果“全部” - 如果3个数据帧没有相同数量的记录会怎么样?你将如何构建这些值的向量?看起来你需要重新设计整个事物 - 这似乎不是一个正确的使用Spark ... –