我尝试使用 Spark 数据帧而不是 RDD,因为它们似乎比 RDD 更高级,并且往往会生成更可读的代码。
在 14 个节点的 Google Dataproc 集群中,我有大约 600 万个名称,这些名称由两个不同的系统转换为 id:sa
and sb
. Each Row
包含name
, id_sa
and id_sb
。我的目标是生成一个映射id_sa
to id_sb
这样对于每个id_sa
, 相应的id_sb
是所有附加名称中最常见的 IDid_sa
.
让我们尝试用一个例子来阐明。如果我有以下行:
[Row(name='n1', id_sa='a1', id_sb='b1'),
Row(name='n2', id_sa='a1', id_sb='b2'),
Row(name='n3', id_sa='a1', id_sb='b2'),
Row(name='n4', id_sa='a2', id_sb='b2')]
我的目标是生成一个映射a1
to b2
。事实上,与以下内容相关的名称a1
are n1
, n2
and n3
,分别映射到b1
, b2
and b2
, so b2
是关联名称中最常见的映射a1
。同样地,a2
将被映射到b2
。可以假设总会有赢家:无需打破平局。
我希望我能使用groupBy(df.id_sa)
在我的数据框上,但我不知道下一步该做什么。我希望有一个聚合最终可以生成以下行:
[Row(id_sa=a1, max_id_sb=b2),
Row(id_sa=a2, max_id_sb=b2)]
但也许我尝试使用错误的工具,我应该重新使用 RDD。