通过隐式转换创建toDF函数来创建DataFrame对象

方式一:Scala集合创建DataFrame

import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SparkSession}

object CreateSparkSession {
  def main(args: Array[String]): Unit = {
    val sparksqlConf = new SparkConf().setMaster("local[*]").setAppName("sparksql")
    val sparkSession = SparkSession.builder().config(sparksqlConf).getOrCreate()

    /*
     1. Scala集合创建DataFrame 默认只适合Seq集合体系
        集合最好是一个元组类型的数据

        集合中的toDF函数不存在,需要通过隐式转换来增强集合的执行方式
        隐式转换函数不需要我们定义,在SparkSession中定义了转换DataFrame所需要的所有隐式转换函数,
        但是我们需要引入这些隐式转换函数
        引入转换函数是在我们创建sparkSession对象中
     */
    import sparkSession.implicits._ // 导入sparkSession中的所有隐式转换函数
    val array: Seq[(String, Int, String)] = Array(("zs", 20, "男"), ("ww", 30, "男"), ("zl", 25, "男"))
    val dataFrame: DataFrame = array.toDF("name", "age", "sex")
    dataFrame.show()
  }
}

方式二:通过RDD的toDF函数创建DataFrame

import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.rdd.RDD

object CreateSparkSession {
  def main(args: Array[String]): Unit = {
    val sparksqlConf = new SparkConf().setMaster("local[*]").setAppName("sparksql")
    val sparkSession = SparkSession.builder().config(sparksqlConf).getOrCreate()

    /*
     2. 通过RDD的toDF函数来创建DataFrame
         RDD的创建需要依赖于SparkContext  SparkContext不需要创建了,因为SparkSession中封装了一个SparkContext
     */
    import sparkSession.implicits._
    val sparkContext = sparkSession.sparkContext
    val rdd: RDD[(String, Int, String)] = sparkContext.makeRDD(Array(("zs", 20, "男"), ("ww", 30, "男"), ("zl", 25, "男")))
    val dataFrame1: DataFrame = rdd.toDF("name", "age", "sex")
    dataFrame1.show()
  }
}
posted @ 2022-08-26 12:03  jsqup  阅读(300)  评论(0编辑  收藏  举报