- 说明
- 定义:
底层用到了函数的柯里化,需要传递两个值。
第二个值是一个隐式参数,需要定义一个隐式变量给隐式参数传递值。
隐式变量不需要我们定义 在SparkSession中全部给我们定义好了。
隐式变量是一个编码器Encoder变量
我们只需要导入即可
import session.implicits._
- 与dataframe的不同:
Dataset中列名是和传入的集合、RDD的类型是有关系的,
如果类型就是普通集合类型或者元组类型或者是普通类型 那列名随机生成。
如果类型是Bean,那么列名就是Bean的属性名,无需指定。而dataframe需要指定。
- 通过集合创建
- 定义:createDataset(Seq[T])
package SparkSQL.DataSet
import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}
object CreateDatasetByCreateDataset {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setAppName("demo01").setMaster("local[*]")
val session = SparkSession.builder().config(sparkConf).getOrCreate()
// createDataset需要一个隐式变量值 Encoder[Teacher],所以需要导入隐式函数
import session.implicits._
val dataset: Dataset[(String, Int)] = session.createDataset(Array(("zs", 20), ("ls", 21)))
dataset.show()
}
}
- 通过rdd创建
- 定义:createDataset(RDD[T])
import session.implicits._
val rdd: RDD[(String, Int)] = session.sparkContext.makeRDD(Array(("zs", 20), ("ls", 21)))
val dataset1 = session.createDataset(rdd)
dataset1.show()
- 通过list创建
- 定义:createDataset(util.List[T])
import session.implicits._
val dataset2: Dataset[(String, Int)] = session.createDataset(List(("zs", 20), ("ls", 22)))
dataset2.show()
标签:val,RDD,List,Dataset,createDataset,session,import,隐式
From: https://www.cnblogs.com/jsqup/p/16639232.html