value tods不是org.apache.spark.rdd.rdd的成员

20jt8wwn  于 2021-06-01  发布在  Hadoop
关注(0)|答案(2)|浏览(552)

我正在尝试编写示例apachespark程序,将rdd转换为数据集。但在这个过程中,我得到了编译时错误。
下面是我的示例代码和错误:
代码:

import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import org.apache.spark.SparkContext
import org.apache.spark.sql.Dataset

object Hello {

  case class Person(name: String, age: Int)

  def main(args: Array[String]){
    val conf = new SparkConf()
      .setAppName("first example")
      .setMaster("local")
    val sc = new SparkContext(conf)
    val peopleRDD: RDD[Person] = sc.parallelize(Seq(Person("John", 27)))
    val people = peopleRDD.toDS
  }
}

我的错误是:

value toDS is not a member of org.apache.spark.rdd.RDD[Person]

我添加了spark core和spark sql jar。
我的版本是:
Spark1.6.2
斯卡拉2.10

kkih6yb8

kkih6yb81#

Spark版本<2.x toDS 提供 sqlContext.implicits._ ```

val sqlContext = new SQLContext(sc);
import sqlContext.implicits._
val people = peopleRDD.toDS()


## Spark版本>=2.x

val spark: SparkSession = SparkSession.builder
.config(conf)
.getOrCreate;

import spark.implicits._
val people = peopleRDD.toDS()

vc6uscn9

vc6uscn92#

我在你的代码中看到两个错误。
首先你必须 import sqlContext.implicits._ 作为 toDS 以及 toDF 在sqlcontext的隐式中定义。
第二个是 case class 应该在case类正在使用的类范围之外定义 task not serializable exception 将会发生
完整的解决方案如下

import org.apache.spark.SparkConf
    import org.apache.spark.rdd.RDD
    import org.apache.spark.SparkContext
    import org.apache.spark.sql.Dataset

    object Hello {
      def main(args: Array[String]){
      val conf = new SparkConf()
      .setAppName("first example")
      .setMaster("local")
      val sc = new SparkContext(conf)
      val sqlContext = new SQLContext(sc)

      import sqlContext.implicits._
      val peopleRDD: RDD[Person] = sc.parallelize(Seq(Person("John", 27)))
      val people = peopleRDD.toDS
      people.show(false)
      }
    }
    case class Person(name: String, age: Int)

相关问题