火花数据集的转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了火花数据集的转换相关的知识,希望对你有一定的参考价值。

我在RDBMS中有很少的数据库表,在当前逻辑中,所有这些表都被连接并提供一些数据,基本上SQL存储为视图的一部分。想通过使用火花数据集在spark中做类似的转换,现在我已经使用sqoop将数据推送到HDFS,想要通过操作应用一些组和命令。

什么是加入数据集的最佳方式,比如将所需的列转储到内存中(ike df.registeredTempTable())并应用连接,或者我可以使用数据集连接,因为HDFS中的不同文件中有数据可用。请建议我好approch。

关心Ananth

答案

我建议再往前走一点。我不会选择在数据集之间进行连接。

我会按照下一个方法:

  1. Sqoop参与该过程的所有表。
  2. 使用Apache Spark或Apache Crunch创建Avro文档。
  3. 将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管道期间转换数据而不是在运行时进行转换。

希望这能澄清这种方法。

以上是关于火花数据集的转换的主要内容,如果未能解决你的问题,请参考以下文章

如何在火花中遍历数据集列?

单元测试火花数据帧转换链接

如何将火花流输出转换为数据帧或存储在表中

如何在并行火花中运行转换

数据类型转换火花数据框列 - pyspark

将熊猫数据帧转换为火花数据帧时收到错误