2016-09-14 100 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並測試整個想法。謝謝。 –

相關問題