用scala中的随机变量连接两个Dataframe

k97glaaz  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(267)

我有2个Dataframe事件和地址。
活动:

Eent_id |Type|Event_date
AA-XX-BB|SMS |1613693293023
AA-BB-DD|CALL|1613693295039

地址:

Postcode|CityName
RG15NL  |Reading
SL34AD  |Slough

我想通过添加address和postcode值来丰富事件数据集。
由于这两个集合之间没有公共密钥,我只是在寻找一个解决方案,从地址文件中随机选取一行并附加到事件文件。
作为一个示例数据,我可以从地址文件中随机抽取任何一行并附加到事件文件。
请让我知道,如果有一种方法,我可以实现这一点,因为这两个数据集之间没有共同的关键。

gstyhher

gstyhher1#

如果行数不同,可以尝试交叉连接,然后为每个行选择一个地址 event_id 使用 row_number 在随机排列的分区上:

import org.apache.spark.sql.expressions.Window

val result = df.crossJoin(address_df).withColumn(
    "rn",
    row_number().over(Window.partitionBy("Eent_id").orderBy(rand()))
  ).filter("rn = 1").drop("rn")

result.show
//+--------+----+-------------+--------+--------+
//| Eent_id|Type|   Event_date|Postcode|CityName|
//+--------+----+-------------+--------+--------+
//|AA-XX-BB| SMS|1613693293023|  SL34AD|  Slough|
//|AA-BB-DD|CALL|1613693295039|  SL34AD|  Slough|
//+--------+----+-------------+--------+--------+

相关问题