Apache spark spark数据集的变换

Apache spark spark数据集的变换,apache-spark,dataset,Apache Spark,Dataset,我在RDBMS中很少有数据库表,在当前的逻辑中,所有这些表都被连接起来并提供一些数据,基本上SQL是作为视图的一部分存储的。 希望通过使用spark数据集在spark中进行类似的转换, 现在我已经使用sqoop将数据推送到HDFS中,希望应用一些GROUPBY和ORDERBY操作 连接数据集的最佳方式是什么,例如将所需列转储到内存ike df.registeredTempTable和apply joins中,或者我可以使用数据集连接,因为数据在HDFS的不同文件中可用。 请给我推荐一个好方法 问

我在RDBMS中很少有数据库表,在当前的逻辑中,所有这些表都被连接起来并提供一些数据,基本上SQL是作为视图的一部分存储的。 希望通过使用spark数据集在spark中进行类似的转换, 现在我已经使用sqoop将数据推送到HDFS中,希望应用一些GROUPBY和ORDERBY操作

连接数据集的最佳方式是什么,例如将所需列转储到内存ike df.registeredTempTable和apply joins中,或者我可以使用数据集连接,因为数据在HDFS的不同文件中可用。 请给我推荐一个好方法

问候
阿南

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

我将采用下一种方法:

Sqoop处理过程中涉及的所有表。 使用apachespark或apachecrunch创建Avro文档。 将配置单元表装载到上一步创建的数据。 让我们来看看你提到的例子:

一,。Sqoop数据:您已经介绍了这个步骤

二,。创建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
文档的结构取决于您将如何使用数据,可以有两个选项:

雇用者 部门 这样查询就容易多了

采用这种方法的好处是,当关系数据库模型中有太多的表时,查询会变得更复杂,而且当表的大小太大时,在运行时连接数据会耗费大量时间,这是因为您希望在ETL管道中传输数据,而不是在运行时传输


希望这能澄清方法

为什么要在Hadoop环境中保持表的相同概念?我将通过创建Avro文档而不是应用连接来转换数据。非常感谢您的回复。比如说,我有employee表和department表,使用sqoop作业,我将这两个表数据转储到HDFS中的单独文件夹中。现在要执行以下查询选择部门名称为“部门名称”,将*计数为“员工数量”,从部门内部加入员工。部门id=部门。部门id按部门分组。部门id,部门名称按部门名称排序;你能详细介绍一下avro文件吗。
{"name": "John", "department": "Sales"}
{"name": "Bruno", "department": "Sales"}
{"name": "Alicia", "department": "Technology"}
{"name": "George", "department": "Technology"}
{"name": "Sales", "Employers": ["John", "Bruno"]}
{"name": "Technology", "Employers": ["Alicia", "George"]}