对象存储使用案例_Spark SQL 使用反射推断模式

此方法使用反射来生成包含特定类型的对象的RDD的模式。 Spark SQL的Scala接口支持将包含案例类的RDD自动转换为DataFrame。 case类定义了表的模式。 case类的参数的名称使用反射读取,它们成为列的名称。

案例类也可以嵌套或包含复杂类型,如序列或数组。 此RDD可以隐式地转换为DataFrame,然后注册为表。 表可以在后续的SQL语句中使用。

让我们考虑一个名为employeeee.txt的文本文件中的员工记录示例。 通过从文本文件读取数据并使用默认SQL函数将其转换为DataFrame来创建RDD。

给定数据 - 查看在运行spark shell点的当前相应目录中名为employees.txt的文件的以下数据。

a0a56028f494accb2e94a1726937d2d3.png

以下示例说明如何使用“反射”生成模式。

启动Spark Shell

使用以下命令启动Spark Shell。

d955e6cb71907ff3bc490eccd5c38662.png

创建SQLContext

使用以下命令生成SQLContext。 这里,scmeans是SparkContext对象。

4026c15f0e9a35bf2423c78af42e3c48.png

导入SQL函数

使用以下命令导入用于将RDD隐式转换为DataFrame的所有SQL函数。

9a7ae5b3dd6262dda29df6b5c9b53d3e.png

创建Case Class

接下来,我们必须使用案例类定义员工记录数据的模式。 以下命令用于根据给定数据(id,name,age)声明Case Class。

4f5d32ea6b797b3fd8743429540dca16.png

创建RDD和应用转换

使用以下命令生成RDD namedemplby,从中读取数据fromemployee.txt并使用Map函数将其转换为DataFrame。这里,定义了两个映射函数。 一个是将文本记录分割成字段(.map(_。split(“,”)))和第二个映射函数用于将单个字段(id,name,age)转换为一个case类对象 0).trim.toInt,e(1),e(2).trim.toInt))。最后,toDF()方法用于将具有模式的案例类对象转换为DataFrame。

60dcc506cf79b4d6a8c85260fa2f3525.png

输出:

67cb57d01cba89a8fba257f72c56acc5.png

将DataFrame数据存储在表中

使用以下命令将DataFrame数据存储到名为employeeee的表中。 在这个命令之后,我们可以应用所有类型的SQL语句。

f9430915fb8d893a5447f7d44f90639c.png

员工表已准备就绪。 让我们现在使用SQLContext.sql()方法在表上传递一些sql查询。选择DataFrame上的查询
使用以下命令从theemployableable中选择所有记录。 这里,我们使用变量allrecords来捕获所有记录数据。 要显示这些记录,请调用show()方法。

8a6da3c5ce2d9d5117a4646155272a47.png

要查看allrecords DataFrame的结果数据,请使用以下命令。

dad51ba7e7b007b8a9bf81de7d5451fc.png

输出:

fa414415920b8aad6c321f2e388f23de.png

子句SQL查询数据帧

使用以下命令在表中应用where语句。 这里,变量agefilter存储年龄在20和35之间的雇员的记录。

d82815a201b61c5a19778775cb63cf5a.png

要查看agefilter数据帧的结果数据,请使用以下命令。

7efca9e97a2db29962c65cbaabdeb22a.png

输出:

e43c6b0a3e959e35c719d6b79c2d3bdc.png

前两个查询是针对整个表DataFrame传递的。 现在让我们尝试通过对其应用Transform来从结果DataFrame获取数据。

使用列索引从agefilter 数据帧获取ID值以下语句用于从agefilter RDD结果中获取ID值,使用字段索引。

62d3133182d8b7ab354ff8c246d406e3.png

输出

fa97e105cdaf956cc0e829eadef6b75d.png

这种基于反射的方法可以获得更加简洁的代码,并且在编写Spark应用程序时更好地了解其概要。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值