PySpark从另一个数据框

时间:2018-06-05 13:46:10

标签: python apache-spark dataframe functional-programming pyspark

在PySpark中寻找更具功能性和计算效率的方法 - >

我有主表(包含数十亿行),感兴趣的列是:

id - (String),

令牌 - (数组(字符串)) - 前,['alpha','beta','gamma']

- (将其称为数据帧,df1)

我有另一个摘要表,其中包含前25个令牌,如:

- (将其称为数据帧,df2) 例如:

令牌

α

β

现在,对于第二个表(或数据帧),我希望在第一个表中追加一行包含该令牌的ID列表,以便结果如下:

Token Ids

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)

2 个答案:

答案 0 :(得分:0)

Explode tokens的{​​{1}}数组列,然后df1 join(左连接)小标记令牌和令牌< / em>然后df2令牌并收集groupBy s设置

id

我希望答案很有帮助

答案 1 :(得分:0)

您也可以尝试将两个表连接到一个新列上,该列实际上仅包含分解为各个行的标记。从计算效率,分配的资源和所需的处理时间这将是有帮助的。

此外,还有一些现成的联接特权,包括“地图侧联接”,这将进一步推动您的事业。