【发布时间】:2017-01-22 02:40:05
【问题描述】:
我编写的 scala 代码给了我数据类型错误。主要方法 testpredict_02 采用 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期望什么类型? -
谢谢扎克。 MyModel.predict 期望向量为 DOUBLE。收入选择(“收入指数”)资源2:org.apache.spark.sql.DataFrame = [收入指数:双]年龄.选择(“年龄指数”)资源1:org.apache.spark.sql.DataFrame = [年龄指数:双]虽然列数据类型是 Double,但由于 age.select("age_index") 和income.select("income_index") 返回 sql.DataFrame,我遇到了这个问题。请问有没有其他方法可以获取列值。
-
但是每个 Dataframe 都包含 许多 双精度数据 - Dataframe 是一个分布式的 collection 记录...你想要哪一个?第一的?任何?全部?如果“全部” - 如果 3 个数据框的记录数不同怎么办?你将如何为这些值构建向量?看起来你需要重新设计整个东西 - 这似乎不是 Spark 的正确使用......
-
再次感谢。我已经确定,在代码中每个数据帧将只有一个 DOUBLE 值(只有一列)。最终我想要的是构建类似 testpredict_02(Vectors.dense(1.0,2.0,2.0)) 的东西,其中的值来自 DataFrame。
-
"one DOUBLE value (only one column)" --> 这是错误的——一个 column 包含多个 values,就像在一个数据库 (en.wikipedia.org/wiki/Column_(database))
标签: scala apache-spark