package february.sql
import org.apache.spark.sql.SparkSession
/**
*
* ====== Spark SQL默认处理的format是parquet ====
* Description: Parquet 文件操作
*
* 处理parquet数据
* spark.read.format("parquet").load(path)
* df.write.format("parquet").save(path)
*
* cd $SPARK_HOME/bin
* ./spark-shell --master local[2] --jars ~/software/mysql-connect-java-5.1.31-bin.jar
*
*
* val DEFAULT_DATA_SOURCE_NAME = SQLConfigBuilder("spark.sql.sources.default")
* .doc("The default data source to use in input/output.")
* .stringConf
* .createWithDefault("parquet")
* parquet是Spark SQL默认的数据源
*
* @Author: 留歌36
* @Date: 2019/2/27 19:53
*/
object ParquetAPP extends App {
val spark = SparkSession.builder().appName(this.getClass.getSimpleName).master("local[2]").getOrCreate()
// 方式一: spark.read.format("parquet").load(path) 这个是标准的写法
val peopleDF = spark.read.format("parquet").load("F:\resources\users.parquet")
// 打印表的定义信息
// peopleDF.printSchema()
// 显示DF的前20条数据
// peopleDF.show()
// 这里只取两列
// peopleDF.select("name","favorite_color").show()
// 将取得的两列的值写入文件(Json格式)
// peopleDF.select(userDF("name"),userDF("favorite_color")).write.format("json").save("F:\tmp\jsonout")
// 方式二:spark.read.load(path) 简化的写法
val peopleDF2 = spark.read.load("F:\resources\users.parquet")
// peopleDF2.show()
// 方式三:spark.read.format("parquet").option("path",path).load().show() 参数的方式
spark.read.format("parquet").option("path","F:\resources\users.parquet").load().show()
// 方式四:Spark.sql 处理parquet文件
// CREATE TEMPORARY VIEW parquetTable 创建的临时表
// USING org.apache.spark.sql.parquet 指定sql处理的文件类型
// OPTIONS (
// path "examples/src/main/resources/people.parquet"
// )
//
// SELECT * FROM parquetTable
// 在生产环境中一定要注意设置spark.sql.shuffle.partitions,默认是200,及需要配置分区的数量
// spark.sqlContext.setConf("spark.sql.shuffle.partitions","10")
spark.stop()
}