我在其他SO帖子中读过这个问题,我仍然不知道我做错了什么。原则上,添加这两行:
Map<String, Object> params = new HashMap<>();
params.put("paramName1", "paramVal1")
params.put("paramName2", "paramVal2");
String script = "price = doc['price'].value; margin = doc['margin'].value;
if (price < threshold) { return price * margin / target };
return price * (1 - discount) * margin / target;"
XContentBuilder builder =
new ScriptScoreFunctionBuilder()
.script(script)
.lang("groovy")
.params(params)
.toXContent(XContentBuilder, params);
应该已经完成了这个技巧,但错误仍然存在
这是我的build.sbt:
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
我的scala代码是:
name := "PickACustomer"
version := "1.0"
scalaVersion := "2.11.7"
libraryDependencies ++= Seq("com.databricks" %% "spark-avro" % "2.0.1",
"org.apache.spark" %% "spark-sql" % "1.6.0",
"org.apache.spark" %% "spark-core" % "1.6.0")
我总是得到:
值toDF不是org.apache.spark.rdd.RDD的成员[摘要]
现在有点失落。有什么想法吗?
答案 0 :(得分:8)
将您的案例类移到main
之外:
object Foo {
case class Summary(ismatch: Double, t_to_last:Double, nflips:Double,d_uid: Double, truth:Double, guess:Double)
def main(args: Array[String]){
...
}
}
关于它的范围的一些事情阻止了Spark能够处理Summary
的模式的自动派生。仅供参考我实际上从sbt
得到了不同的错误:
没有可用于摘要的TypeTag
答案 1 :(得分:0)
大。拯救我的生命
将您的案例类移到main之外:
object Foo {
case class Summary(ismatch: Double, t_to_last:Double, nflips:Double,d_uid: Double, truth:Double, guess:Double)
def main(args: Array[String]){
...
}
}
答案 2 :(得分:0)
将案例类移到函数主体之外。然后使用
import spark.implicits._
。