处理依赖的 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 数据框来做到这一点吗?
由于 df1
和 df2
派生自 df
对 df1
所做的更改不会反映在 df2
。
如果您通过引入 monotonically_increasing_id
并在 df1
和 df2
中包含此 ID 来唯一标识 df
中的行,那么您可以使用此方法ID
通过连接传播条件。
也就是说,在 df
上应用依赖转换然后才提取 df1
和 df2
以避免不必要的连接是有益的。
假设我们有一个嵌套的 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 数据框来做到这一点吗?
由于 df1
和 df2
派生自 df
对 df1
所做的更改不会反映在 df2
。
如果您通过引入 monotonically_increasing_id
并在 df1
和 df2
中包含此 ID 来唯一标识 df
中的行,那么您可以使用此方法ID
通过连接传播条件。
也就是说,在 df
上应用依赖转换然后才提取 df1
和 df2
以避免不必要的连接是有益的。