Spark SQL之外部数据源

概述

  从Spark 1.2版本开始,Spark SQL正式支持外部数据源。它可以通过DataFrame接口对各种数据源进行操作,例如orc,parquet,json,hive,jdbc,avro等。它既可以通过转换成RDD进行操作,也可以被创建为一个临时视图。将外部数据读入后创建为一个临时视图,可以用sql的方式进行查询处理。这个特性可以很方便让我们直接可以用Spark SQL操作各种格式的数据,而且可以轻松的将它们进行互相转换。下面将介绍Spark SQL加载和保存外部数据源的一般方法。

测试JSON
这里有一个people.json文件,这里用到的数据为spark官方提供的测试数据,在spark包的examples目录下。

[hadoop@hadoop001 resources]$ cat people.json 
{"name":"Michael"}
{"name":"Andy", "age":30}
{"name":"Justin", "age":19}

接下来用Spark SQL的外部数据源的方式将数据加载为DataFrame。这里用的是一种通用的方式进行加载。format里面传入的是将要处理的文件的格式。load传入的是文件的路径。

object ExternalDataSourceAPP {
  def main(args: Array[String]): Unit = {
    val sparkSession = SparkSession.builder().appName("ExternalDataSourceAPP")
      .master("local[2]")
      .getOrCreate()

    /**
      * 通用
      */

      // 读
       val jsonDF = sparkSession.read.format("json").load("file:\\F:\\sparktestdata\\resources\\people.json")
	   
       jsonDF.show()

	 sparkSession.stop()
  }
}

-------------------输出结果--------------------
+----+-------+
| age|   name|
+----+-------+
|null|Michael|
|  30|   Andy|
|  19| Justin|
+----+-------+

还有一种简写的方式进行加载,read之后直接.+你要处理的数据格式,里面传入path即可。例如处理json格式如下。其它的还有scv,text,jdbc,orc,parquet,table(hive)等。

val jsonDF = sparkSession.read.json("file:\\F:\\sparktestdata\\resources\\people.json")
      jsonDF.show()

Spark SQL外部数据源不仅可以读,还可以写。我们将上面的jsonDF写入一个json文件。注意,这里写入只能指定到文件夹,不能指定到文件。mode是写入的方式,传入的参数有overwrite,append,ignore,error。

jsonDF.write.format("json").mode("overwrite").save("file:\\F:\\sparktestdata\\resources\\peopleCopy.json")

这里我们可以将读入的json格式存储为其它格式的数据,例如存储为orc。我们可以发现,利用外部数据源我们可以很方便的转换数据格式。

jsonDF.write.format("orc").mode("overwrite").save("file:\\F:\\sparktestdata\\resources\\peopleCopy.json")

我们还可以直接将jsonDF存储到hive表中

jsonDF.write.saveAsTable("person")

猜你喜欢

转载自blog.csdn.net/qq_34382453/article/details/85756344