1. 程式人生 > >Spark SQL中 RDD 轉換到 DataFrame

Spark SQL中 RDD 轉換到 DataFrame

pre ase replace 推斷 expr context 利用反射 轉換 port

1.people.txt
soyo8, 35
小周, 30
小華, 19
soyo,88
2.
/**
* Created by soyo on 17-10-10.
* 利用反射機制推斷RDD模式
*/
import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
import org.apache.spark.sql.{Encoder, SparkSession}
import org.apache.spark.sql.SparkSession
case class Person(name:String,age:Int)
object RDD_To_DataFrame {
val spark=SparkSession.builder().getOrCreate()
import spark.implicits._ //支持把一個RDD隱式轉換為一個DataFrame

def main(args: Array[String]): Unit = {
val df =spark.sparkContext.textFile("file:///home/soyo/桌面/spark編程測試數據/people.txt")
.map(_.split(",")).map(x=>Person(x(0),x(1).trim.toInt)).toDF()

df.createOrReplaceTempView("people") //定制people
val personDF=spark.sql("select * from people where age >=30")
personDF.map(x=>"姓名="+x(0)+","+"年齡="+x(1)).show()
//轉換為表的形式
personDF.select(personDF("name").as("姓名"),personDF("age").as("年齡")).show()
personDF.rdd.saveAsTextFile("file:///home/soyo/桌面/spark編程測試數據/新數據.txt")
}

}
結果:
+--------------+
| value|
+--------------+
|姓名=soyo8,年齡=35|
| 姓名=小周,年齡=30|
| 姓名=soyo,年齡=88|
+--------------+

+-----+---+
| 姓名| 年齡|
+-----+---+
|soyo8| 35|
| 小周| 30|
| soyo| 88|
+-----+---+


Spark SQL中 RDD 轉換到 DataFrame