SPARK/SQL:spark can't resolve symbol toDF

2020-07-03 04:50发布

问题:

In my project, my external library is spark-assembly-1.3.1-hadoop2.6.0, if I press '.', the IDE inform me toDF(), but it inform me that can't resolve symbol toDF() when I code it in. I'm sorry I can't find the toDF() in Apache Spark doc.

case class Feature(name:String, value:Double, time:String, period:String)
val RESRDD = RDD.map(tuple => {
    var bson=new BasicBSONObject();
    bson.put("name",name);
    bson.put("value",value);
    (null,bson);
})

RESRDD
 .map(_._2)
 .map(f => Feature(f.get("name").toString, f.get("value").toString.toDouble))
 .toDF()

回答1:

To be able to to use toDF you have to import sqlContext.implicits first:

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._

case class Foobar(foo: String, bar: Integer)

val foobarRdd = sc.parallelize(("foo", 1) :: ("bar", 2) :: ("baz", -1) :: Nil).
    map { case (foo, bar) => Foobar(foo, bar) } 

val foobarDf = foobarRdd.toDF
foobarDf.limit(1).show


回答2:

This is a very late response to the question but just for the sake of people who are still looking for the answer:

Try the same command on Spark 1.6 it will work.

I was facing the same issue and searched in google and didn't get solution and then I upgraded Spark from 1.5 to 1.6 and it worked.

If you don't know your Spark version:

spark-submit --version (from command prompt)
sc.version (from Scala Shell)