火花数据集的转换

时间:2018-05-16 14:27:59

标签: apache-spark dataset

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

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

此致 Ananth

1 个答案:

答案 0 :(得分:1)

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

我会遵循下一个方法:

  1. Sqoop参与该过程的所有表格。
  2. 使用Apache Spark或Apache Crunch创建Avro文档。
  3. 将Hive表安装到上一步创建的数据。
  4. 让我们玩你提到的例子:

    <强> 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
    

    文档的结构将取决于您将如何使用数据,可以有两个选项:

    雇主

    {"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"]}
    

    然后查询更容易。

    遵循这种方法的好处是,当您的关系数据库模型包含太多表时,您的查询会变得更复杂,而且,当表的大小太大时,在运行时加入数据就是时间昂贵,这是因为您希望在ETL管道期间转换数据而不是在运行时进行转换。

    希望这澄清方法。