Spark每日半小时(22)——Spark SQL中的结构化数据

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+已经废弃的类,方法在这里都会有说明。我打算转战官网了。之后的博客会以官网的内容为主,理解+翻译吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值