值toDF不是org.apache.spark.rdd.RDD的成员

时间:2016-03-17 09:00:22

标签: scala apache-spark apache-spark-sql

我在其他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的成员[摘要]

现在有点失落。有什么想法吗?

3 个答案:

答案 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._