通过createDataset创建Dataset数据集(Array,RDD,List)

  1. 说明
  • 定义:
底层用到了函数的柯里化,需要传递两个值。
第二个值是一个隐式参数,需要定义一个隐式变量给隐式参数传递值。
隐式变量不需要我们定义 在SparkSession中全部给我们定义好了。
隐式变量是一个编码器Encoder变量
我们只需要导入即可
import session.implicits._
  • 与dataframe的不同:
    Dataset中列名是和传入的集合、RDD的类型是有关系的,
    如果类型就是普通集合类型或者元组类型或者是普通类型 那列名随机生成。
    如果类型是Bean,那么列名就是Bean的属性名,无需指定。而dataframe需要指定。
  1. 通过集合创建
  • 定义: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()
  }
}
  1. 通过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()
  1. 通过list创建
  • 定义:createDataset(util.List[T])
import session.implicits._
val dataset2: Dataset[(String, Int)] = session.createDataset(List(("zs", 20), ("ls", 22)))
dataset2.show()
posted @ 2022-08-30 14:32  jsqup  阅读(423)  评论(0编辑  收藏  举报