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

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

作者: Map_Reduce | 来源:发表于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