在PySpark中寻找更具功能性和计算效率的方法 - >
我有主表(包含数十亿行),感兴趣的列是:
id - (String),
令牌 - (数组(字符串)) - 前,['alpha','beta','gamma']
- (将其称为数据帧,df1)
我有另一个摘要表,其中包含前25个令牌,如:
- (将其称为数据帧,df2) 例如:
α
β
子
穆
现在,对于第二个表(或数据帧),我希望在第一个表中追加一行包含该令牌的ID列表,以便结果如下:
Alpha [1,2,3]
Beta [3,5,6,8,9]
Zi [2,8,12]
穆[1,15,16,17]目前的方法:
从df2中找出不同的标记并将其存储为一个列表(比如l1)。
(For every token from list, l1):
Filter df1 to extract the unique ids as a list, call it l2
Add this new list (l2) as a new column (Ids) to the dataframe (df2) to create a new dataframe (df3)
persist df3 to a table
我同意这是一种terribe方法,对于任何具有100k记录的l1,它将永远运行。任何人都可以帮我重写代码(对于Pyspark)
答案 0 :(得分:0)
Explode
tokens
的{{1}}数组列,然后df1
join
(左连接)小标记令牌和令牌< / em>然后df2
令牌并收集groupBy
s设置
id
我希望答案很有帮助
答案 1 :(得分:0)
您也可以尝试将两个表连接到一个新列上,该列实际上仅包含分解为各个行的标记。从计算效率,分配的资源和所需的处理时间这将是有帮助的。
此外,还有一些现成的联接特权,包括“地图侧联接”,这将进一步推动您的事业。