实战外部数据源,包括操作 parquet数据 hive数据,mysql数据 三种数据 :
package extenalSourcceApi import org.apache.spark.sql.SparkSession /** * 读取外部主数据源 parquet数据 hive数据,mysql数据 */ object parquetSource { def main(args: Array[String]): Unit = { val spark = SparkSession.builder().appName("parquetSource").master("local[2]").getOrCreate() //加载数据 第一种写法 val parquetDF = spark.read.format("parquet").load("/home/lc/spark-2.1.0-bin-hadoop2.6/examples/src/main/resources/users.parquet") //加载数据 第二种写法 val parquetDF2 = spark.read.load("/home/lc/spark-2.1.0-bin-hadoop2.6/examples/src/main/resources/users.parquet") //默认读取的是parquet文件,其他的文件需要使用format函数 //加载数据 第三种写法 val parquetDF3 = spark.read.parquet("/home/lc/spark-2.1.0-bin-hadoop2.6/examples/src/main/resources/users.parquet") parquetDF.show() parquetDF2.show() parquetDF3.show() //将数据写成json格式的文件 parquetDF.write.format("json").save("/home/lc/spark-2.1.0-bin-hadoop2.6/examples/src/main/resources/u.json") // 使用sparkSql来操作hive表中的数据,因为spark中配置了hive-site.xml文件,所以sparkSql可以直接操作hive中表的数据 spark.sql("select * from hive2").filter("age != null").write.format("json").save("/home/lc/spark-2.1.0-bin-hadoop2.6/examples/src/main/resources/table.json") //写入hive表 spark.sql("select * from hive2").filter("age != null").write.saveAsTable("hive3") // 设置数据的分区数,需要在生产上根据需要设置 spark.sqlContext.setConf("spark.sql.shuffle.partitions","10") //操作MySQL数据库中的数据 val jdbc = spark.read.format("jdbc") .option("url","jdbc:mysql://localhost:3306") .option("driver","com.mysql.jdbc.Driver") .option("user","lc") .option("password","123456") .option("dbtable","mmall.mmall_user") .load() jdbc.printSchema() jdbc.show() // 将获取到的数据转化为json文件的数据 jdbc.write.format("json") .save("/home/lc/spark-2.1.0-bin-hadoop2.6/examples/src/main/resources/jdbc.json")
// 保存在mysql表中 jdbc.write .format("jdbc") .option("url", "jdbc:postgresql:dbserver") .option("dbtable", "schema.tablename") .option("user", "username") .option("password", "password") .save() } }