**
本人SparkSession如下方式创建,造成了import spark.implicits._无法导入,以至于在RDD转DS时一直报错
**
var spark: SparkSession = null
if (runModel == "local") {
spark = SparkSession.builder().config(sparkconf).master("local").getOrCreate()
} else {
spark = SparkSession.builder().config(sparkconf).master("spark://hadoop1:7077").getOrCreate()
}
原因很简单,我已经提前声明spark=null,在导import spark.implicits.时自然无法导入,解决方法也很简单,在其他object中创建方法,把spark:SparkSession当做参数传入,然后在该方法中import spark.implicits.,即可用相关方法,新创建的object(名为RDD2DS,Ds为样例类)如下:
object RDD2DS{
def rdd2ds(spark:SparkSession,rddds:RDD[Ds]):Dataset[Ds]={
import spark.implicits._
val ds: Dataset[Ds] = spark.createDataset(rddds)
ds
}
}
在主代码中如下引用:
val ds2: Dataset[Ds] = RDD2DS.rdd2ds(spark, rddds)
再次运行即可达到RDD转DS。