toDF не является членом org.apache.spark.rdd.RDD - PullRequest
0 голосов
/ 10 мая 2018

Я пытался запустить эту программу spark в оболочке spark, но она выдает эту ошибку, я уже импортировал неявное, но без изменений.

Здесь я хочу использовать метод toDF для преобразования RDD вDataFrame, но я не могу определить ошибку.

Код:

scala> {
     |   case class HService(
     |                        uhid:String,
     |                        locationid:String,
     |                        doctorid:String,
     |                        billdate: String,
     |                        servicename: String,
     |                        servicequantity: String,
     |                        starttime: String,
     |                        endtime: String,
     |                        servicetype: String,
     |                        servicecategory: String,
     |                        deptname: String
     |                      )
     | 
     |   def main(args: Array[String])
     |   {
     | 
     |     val conf = new SparkConf().setAppName("HHService") // Configuration conf = new Configuration();
     | 
     |     val sc = new SparkContext(conf) // Job job = Job.getInstance(conf, "word count");
     | 
     |     val sqlContext = new org.apache.spark.sql.SQLContext(sc)
     | 
     |     import sqlContext.implicits._
     | 
     |     val hospitalDataText = sc.textFile("/home/training/Desktop/Data/services.csv")
     |     val header = hospitalDataText.first()
     |     val hospitalData = hospitalDataText.filter(a => a != header)
     |     val hData = hospitalData.map(_.split(",")).map(p => HService(p(0),p(1),p(2),p(3),p(4),p(5),p(6),p(7),p(8),p(9),p(10)))
     |     hData.take(4).foreach(println)
     |     val hosService = hData.toDF()
     |     hosService.registerTempTable("HService")
     |     val results =sqlContext.sql("SELECT doctorid, count(uhid) as visits FROM HService GROUP BY doctorid order by visits desc")
     |     results.collect().foreach(println)
     |   }
     | }

Ошибка:

<console>:61: error: value toDF is not a member of org.apache.spark.rdd.RDD[HService]
           val hosService = hData.toDF()
                                  ^

1 Ответ

0 голосов
/ 10 мая 2018

Кажется, вы не используете SparkSession, работает приведенный ниже пример кода:

import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder.master("local[4]").getOrCreate
import spark.implicits._
val hospitalDataText = spark.read.textFile("/tmp/services.csv")
val hData = hospitalDataText.map(_.split(",")).map(p => HService(p(0),p(1),p(2),p(3),p(4),p(5),p(6),p(7),p(8),p(9),p(10)))
val hosService = hData.toDF()


hData: org.apache.spark.sql.Dataset[HService] = [uhid: string, locationid: string ... 9 more fields]
hosService: org.apache.spark.sql.DataFrame = [uhid: string, locationid: string ... 9 more fields]
...