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
网友评论