Подтвердить что ты не робот

SPARK/SQL: искра не может разрешить символ toDF

В моем проекте моя внешняя библиотека spark-assembly-1.3.1-hadoop2.6.0, если я нажимаю '.', IDE сообщает мне toDF(), но он сообщает мне, что не могу разрешить символ toDF(), когда я его код. я Мне жаль, что я не могу найти toDF() в 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()
4b9b3361

Ответ 1

Чтобы иметь возможность использовать toDF, сначала нужно импортировать sqlContext.implicits:

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

Это очень поздний ответ на вопрос, но только ради людей, которые все еще ищут ответ:

Попробуйте ту же команду на Spark 1.6, она будет работать.

Я столкнулся с той же проблемой и искал в google и не получил решение, а затем обновил Spark от 1.5 до 1.6 и работал.

Если вы не знаете версию Spark:

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

Ответ 3

если вы работаете с искровой версией 1.6, то используйте этот код для преобразования rdd в df

from pyspark.sql import SQLContext, Row
sqlContext = SQLContext(sc)
df = sqlContext.createDataFrame(rdd)

если вы хотите присвоить заголовок строкам, используйте это

df= rdd.map(lambda p: Row(ip=p[0], time=p[1], zone=p[2]))

ip, time, zone - это заголовки строк в этом примере.