从多个 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。您可以 union
或 unionByName
所有这些,然后 gruopBy('key')
并使用 count
.
进行聚合
df = (
df1
.unionByName(df2)
.unionByName(df3)
.unionByName(df4)
.unionByName(df5)
.unionByName(df6)
.groupBy('key')
.count()
)
我有 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。您可以 union
或 unionByName
所有这些,然后 gruopBy('key')
并使用 count
.
df = (
df1
.unionByName(df2)
.unionByName(df3)
.unionByName(df4)
.unionByName(df5)
.unionByName(df6)
.groupBy('key')
.count()
)