处理依赖的 PySpark DataFrame

Dealing with Dependent PySpark DataFrames

假设我们有一个嵌套的 PySpark 数据框 df ,其架构如下:

root
 |-- a1: string (nullable = true)
 |-- a2: string (nullable = true)
 |-- arr1: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- dt1: date (nullable = true)
 |    |    |-- dt2: date (nullable = true)
 |    |    |-- dt_indicator: boolean (nullable = true)

假设我们有一个进程将嵌套数据帧扁平化为两个扁平化数据帧 df1 df2 ,具有以下模式:

df1 架构

root
 |-- a1: string (nullable = true)
 |-- a2: string (nullable = true)

df2 架构

|-- dt1: date (nullable = true)
|-- dt2: date (nullable = true)
|-- dt_indicator: boolean (nullable = true)

有没有办法保持 df2 df1 的依赖?例如,如果 a1 更改,则 dt1 dt2 可能会更改。这在单个 PySpark 数据框架中很容易做到。您可以使用两个扁平化的 PySpark 数据框来做到这一点吗?

由于 df1df2 派生自 dfdf1 所做的更改不会反映在 df2

如果您通过引入 monotonically_increasing_id 并在 df1df2 中包含此 ID 来唯一标识 df 中的行,那么您可以使用此方法ID 通过连接传播条件。

也就是说,在 df 上应用依赖转换然后才提取 df1df2 以避免不必要的连接是有益的。