[英]how to solve this error value toDS is not a member of org.apache.spark.rdd.RDD?
[英]value toDS is not a member of org.apache.spark.rdd.RDD
我正在尝试编写将 RDD 转换为数据集的示例 Apache Spark 程序。 但是在那个过程中,我遇到了编译时错误。
这是我的示例代码和错误:
代码:
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 jars。
我的版本是:
火花 1.6.2
scala 2.10
toDS
提供sqlContext.implicits._
val sqlContext = new SQLContext(sc);
import sqlContext.implicits._
val people = peopleRDD.toDS()
val spark: SparkSession = SparkSession.builder
.config(conf)
.getOrCreate;
import spark.implicits._
val people = peopleRDD.toDS()
HIH
我可以在你的代码中看到两个错误。
首先,您必须import sqlContext.implicits._
因为toDS
和toDF
是在toDS
toDF
中定义的。
其次是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)
确切的答案是你同时导入,
import spark.implicits._
import sqlContext.implicits._
这是导致问题的原因,删除其中任何一个,您将不会遇到这样的问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.