从多个 dfs 创建 df key->count 映射

Create df key->count mapping from multiple dfs

我有 3 个输入 dfs,全部采用以下格式:

key | irrelevant_data
----------------------
 A  |   asdfg 
 B  |   asdfg 

key | irrelevant_data
----------------------
 C  |   asdfg 
 B  |   asdfg 

我想将 3 组合成一个类似字典的 df,它将映射键-> 显示它的计数

即来自上面的例子:

key | count
----------------------
 A  |   1 
 C  |   1 
 B  |   2 

运行一次后,我需要将数据保存在字典中以供下一次迭代使用,这将有 3 个新的输入 df。我们可能会遇到相同的键 - 在这种情况下,增加计数。这样做的目的是一旦计数达到 3,我想将其从 table 中删除并获取该密钥。

我正在考虑将其中一个输入 dfs 转换为 MapType(在 df 中保证键是唯一的,但在所有 3 个输入 dfs 中都不是这样):

df1 = df1.withColumn("propertiesMap", F.create_map(
    F.col("key"), F.lit(1)
))

但在那之后我不确定如何从其他 2 个 dfs 添加行并增加计数(如果键已经存在)与创建新行(如果不存在)。我对 python 很熟悉,而且很简单:

# pseudocode of what I essentially want in PySpark, where dict is a df
dict = {}
for curr_df in dfs:
    for key, _ in curr_df.items():
        dict[key] += 1

所以你有 6 个 df。您可以 unionunionByName 所有这些,然后 gruopBy('key') 并使用 count.

进行聚合
df = (
    df1
    .unionByName(df2)
    .unionByName(df3)
    .unionByName(df4)
    .unionByName(df5)
    .unionByName(df6)
    .groupBy('key')
    .count()
)