火花数据集的转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了火花数据集的转换相关的知识,希望对你有一定的参考价值。
我在RDBMS中有很少的数据库表,在当前逻辑中,所有这些表都被连接并提供一些数据,基本上SQL存储为视图的一部分。想通过使用火花数据集在spark中做类似的转换,现在我已经使用sqoop将数据推送到HDFS,想要通过操作应用一些组和命令。
什么是加入数据集的最佳方式,比如将所需的列转储到内存中(ike df.registeredTempTable())并应用连接,或者我可以使用数据集连接,因为HDFS中的不同文件中有数据可用。请建议我好approch。
关心Ananth
答案
我建议再往前走一点。我不会选择在数据集之间进行连接。
我会按照下一个方法:
- Sqoop参与该过程的所有表。
- 使用Apache Spark或Apache Crunch创建Avro文档。
- 将Hive表挂载到上一步创建的数据。
让我们玩你提到的例子:
1. Sqoop数据:你已经介绍了这一步。
2.创建Avro文档
虚拟数据
Departament
id, name
1 Sales
2 Technology
Employers
id, department_id, name
1 1 John
2 1 Bruno
3 2 Alicia
4 2 George
文档的结构将取决于您将如何使用数据,可以有两个选项:
Employer
{"name": "John", "department": "Sales"}
{"name": "Bruno", "department": "Sales"}
{"name": "Alicia", "department": "Technology"}
{"name": "George", "department": "Technology"}
Department
{"name": "Sales", "Employers": ["John", "Bruno"]}
{"name": "Technology", "Employers": ["Alicia", "George"]}
然后查询更容易。
遵循这种方法的好处是,当您的关系数据库模型包含太多表时,您的查询会变得更加复杂,而且,当表的大小太大时,在运行时加入数据的时间也很昂贵,是因为您希望在ETL管道期间转换数据而不是在运行时进行转换。
希望这能澄清这种方法。
以上是关于火花数据集的转换的主要内容,如果未能解决你的问题,请参考以下文章