美文网首页
Spark中RDD、DataFrame和DataSet之间简单的

Spark中RDD、DataFrame和DataSet之间简单的

作者: ae601c79c4fc | 来源:发表于2019-08-05 16:21 被阅读0次
    import org.apache.spark.SparkConf
    import org.apache.spark.rdd.RDD
    import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}
    object SparkSQL_Transform {
        def main(args: Array[String]): Unit = {
            val sparkConf: SparkConf = new SparkConf().setAppName("SparkSQL").setMaster("local[*]")
    
            val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
    
            val rdd: RDD[(String, Int)] = spark.sparkContext.makeRDD(List(("zs", 12), ("ls", 18)))
    
            // TODO rdd -> df
            //在对DataFrame和Dataset进行操作许多操作都需要这个包进行支持
            import spark.implicits._
            val rddToDf: DataFrame = rdd.toDF("name", "age")
            //rddToDf.show()
            // TODO  rdd -> ds
            val mapRDD: RDD[User] = rdd.map {
                case (name, age) => {
                    User(name, age)
                }
            }
            //mapRDD.toDS().show()
            //  TODO  df -> ds
            val dfToDs: Dataset[User] = rddToDf.as[User]
            //dfToDs.show()
            //  TODO  ds -> df
            val dsToDf: DataFrame = dfToDs.toDF()
            //dsToDf.show()
            //  TODO  ds -> rdd
            val dsToRdd: RDD[User] = dfToDs.rdd
            dsToRdd.foreach(println)
            //  TODO  df -> rdd
            val rfToRdd: RDD[Row] = rddToDf.rdd
    
            rfToRdd.foreach(row => {
                //得到0号元素
                println(row.get(0))
            })
            //关闭资源
            spark.stop()
        }
    }
    //样例类User
    case class User(name: String, age: Int)
    

    总结:

    rdd -> df 调用toDf(String*)
    rdd -> ds 需要有类型,所以需要先模式匹配,然后再调用toDs()
    df -> ds 调用as[]
    df -> rdd 调用rdd
    ds -> df 调用toDf()
    ds -> rdd 调用rdd

    相关文章

      网友评论

          本文标题:Spark中RDD、DataFrame和DataSet之间简单的

          本文链接:https://www.haomeiwen.com/subject/rlbmdctx.html