SparkSQL是在Spark1.0中新加入Spark的组件,并快速成为了Spark中较受欢迎的操作结构化和半结构化数据的方式。结构化数据指的是有结构信息的数据——也就是所有的数据记录都具有一致字段结构的集合。Spark SQL支持多种结构化数据源作为输入,而且由于Spark SQL知道数据的结构信息,它还可以从这些数据源中只读出所需字段。
在各种情况下,我们把一条SQL查询给Spark SQL,让它对一个数据源执行查询(选出一些字段或者对字段使用一些函数),然后得到由Row对象组成的RDD,每个Row对象表示一条记录。在Java中,Row对象的访问是基于下标的。每个Row都有一个get()方法,会返回一个一般类型让我们可以进行类型转换。另外还有针对常见基本类型的专用get()方法(例如getFloat()、getInt()、getLong()、getString()、getShort()、getBoolean()等)。
Apache Hive
Apache Hive是Hadoop上的一种常见的结构化数据源。Hive可以在HDFS内或者在其他存储系统上存储多种格式的表。这些格式从普通文本到列式存储格式,应有尽有。Spark SQL可以读取Hive支持的任何表。
要把Spark SQL连接到已有的Hive上,你需要提供Hive的配置文件。你需要将hive-site.xml文件复制到Spark的./conf/目录下。这样做好之后,再从创建出HiveContext对象,也就是Spark SQL的入口,然后你就可以使用Hive查询语言(HQL)来对你的表进行查询,并以由行组成的RDD的形式拿到返回数据。
关于Spark SQL相关可以查看这个类 JavaSparkSQLInit.java
JSON
如果你有记录间结构一致的JSON数据,Spark SQL也可以自动推断出他们的结构信息,并将这些数据读取为记录,这样就可以使得提取字段的操作变得很简单。要读取JSON数据,首先需要使用Hive一样创建一个SparkSession。这里用的是Spark 2+。
突然发现,这本书,真的是太老了。原型用的是Spark1.0+的版本,很多在Spark2+已经废弃的类,方法在这里都会有说明。我打算转战官网了。之后的博客会以官网的内容为主,理解+翻译吧。