SparkSQL之JSON
应和光
2023-12-01
package com.uplooking.bigdata.sql.p2
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.{SparkConf, SparkContext}
/**
* 加载数据源为json格式的数据
* 在使用json作为加载的数据源的时候,
* 1、sparksql会自动识别json中的数据及类型,会将其转化为sql中的元数据
*
* 2、必须要保证每一行都是一条json数据,不要把多条json数据写在一行,容易出现问题
* 常见的问题就是:数据加载有遗漏
*
*/
object ScalaSparkSQLJson {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("ScalaSparkSQLJsonOps").setMaster("local")
conf.set("spark.sql.shuffle.partitions", "1")
val sc = new SparkContext(conf)
val sqlContext = new HiveContext(sc)
// val jsonDF = sqlContext.read.format("json").load("E:/test/spark/sql/sqldf.json")
val jsonDF = sqlContext.read.json("E:/test/spark/sql/sqldf.json")
// jsonDF.show()
// jsonDF.sort("height", "age").show()
import sqlContext.implicits._
//写比较自定义的排序的时候,需要首先引入sqlContext中的隐士转换,增强df的功能
// jsonDF.sort($"height".desc).show()
// jsonDF.sort($"age".asc, $"height".desc).show()
val retDF = jsonDF.sort($"age".asc, $"height".desc)
/**
* conf.set("spark.sql.shuffle.partitions", "1")
* 可以通过设置spark.sql.shuffle.partitions来指定输出文件的个数
*/
// retDF.write.json("E:/test/spark/sql/ret-sqldf.json")
retDF.write.orc("E:/test/spark/sql/ret-sqldf.orc")
sc.stop()
}
}