星火流 |将不同的数据帧并行写入多个表

时间:2021-07-26 15:04:52

标签: scala dataframe apache-kafka spark-structured-streaming

我正在从 Kafka 读取数据并加载到数据仓库中,我是从一个 Kafka 主题 创建一个数据框并在应用所需的转换后,我正在从中创建多个 DF 并将这些 DF 加载到不同的表中,但此操作是按顺序发生的。有没有办法并行化这个表加载过程?

root
|-- attribute1Formatted: array (nullable = true)
|    |-- element: struct (containsNull = true)
|    |    |-- accexecattributes: struct (nullable = true)
|    |    |    |-- id: string (nullable = true)
|    |    |    |-- name: string (nullable = true)
|    |    |    |-- primary: boolean (nullable = true)
|    |    |-- accountExecUUID: string (nullable = true)
|-- attribute2Formatted: struct (nullable = true)
|    |-- Jake-DOT-Sandler@xyz.com: struct (nullable = true)
|    |    |-- id: string (nullable = true)
|    |    |-- name: string (nullable = true)
|    |    |-- primary: boolean (nullable = true)

分别为attribute1Formatted和attribute2Formatted创建了两个不同的数据框,并且这些DF被保存到不同表中的数据库中。

1 个答案:

答案 0 :(得分:0)

我对火花流的了解不多,但我相信流是迭代微批处理,并且在火花批处理执行中,每个动作都有一个接收器/输出。所以你不能一次执行将它存储在不同的表中。

现在

  1. 如果你把它写在一张表中,读者可以简单地只读取他们需要的列。我的意思是:你真的需要把它存放在不同的地方吗?
  2. 可以写两次,过滤掉不需要的字段
  • 两个写操作都会执行完整数据集的计算,然后删除不需要的列
  • 如果完整的数据集计算时间很长,可以在过滤+写入之前缓存