我正在尝试编写示例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
2条答案
按热度按时间kkih6yb81#
Spark版本<2.x
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()
vc6uscn92#
我在你的代码中看到两个错误。
首先你必须
import sqlContext.implicits._
作为toDS
以及toDF
在sqlcontext的隐式中定义。第二个是
case class
应该在case类正在使用的类范围之外定义task not serializable exception
将会发生完整的解决方案如下