IDEA_Fancy QueryによるSparkSQLコードの記述
パッケージcn.itcast.sql
インポートorg.apache.spark.SparkContext
インポートorg.apache.spark.rdd.RDD
インポートorg.apache.spark.sql。{DataFrame、SparkSession}
オブジェクトQueryDemo {
ケースクラスPerson(id:Int、name :String、age:Int)
def main(args:Array [String]):Unit = {
// 1。创建SparkSession
val spark:SparkSession = SparkSession.builder()。master(“ local [ ] ")。appName(“ SparkSQL”).
getOrCreate()
val sc:SparkContext = spark.sparkContext
sc.setLogLevel(“ WARN”)
// 2。读取文件
val fileRDD:RDD [String] = sc.textFile(“ D:\ data \ person。 txt”)
val linesRDD:RDD [Array [String]] = fileRDD.map(.split( ""))
val rowRDD:RDD [Person] = linesRDD.map(line => Person(line(0).toInt、line(1)、line(2).toInt))
// 3. RDDをDFに変換
//注: RDDにはtoDFメソッドがありません。新しいバージョンでは、それにメソッドを追加する必要があります。暗黙的な変換
インポートspark.implicitsを使用できます。//
注:上記のrowRDDの一般的なタイプは、スキーマ情報を含むPersonです
// // SparkSQLリフレクションによって自動的に
取得され、DF val personDFに追加されます:DataFrame = rowRDD.toDF
personDF.show(10)
personDF.printSchema()
// =SQLクエリ=
//0。レジストリ
personDF.createOrReplaceTempView( "t_person")
// 1.すべてのデータを照会
spark.sql( "select * from t_person")。Show()
// 2. Query age + 1
spark.sql( " select age、age + 1 from t_person ")。show()
// 3.最大の年齢
spark.sqlを持つ2人をクエリします(" select name、age from t_person order by age desc limit 2 ")。show()
// 4すべての年齢のクエリ数
( "SELECT年齢、COUNT(spark.sql年齢グループによるt_personから)")。ショー()
30歳以上// 5.クエリ
t_personからspark.sql(「選択*年齢> 30 ”).Show()
// =DSLクエリ=
// 1.すべてのデータをクエリします
personDF.select( "name"、 "age")
// 2.クエリ年齢+ 1
personDF.select( "age" + 1)
// 3.
personDF.sort( "年齢"> 30).SHOW()
SCを。停止()
spark.stop()
}
}