【发布时间】:2016-05-15 02:51:46
【问题描述】:
我正在尝试使用 Spark 数据帧而不是 RDD,因为它们似乎比 RDD 更高级,并且倾向于生成更具可读性的代码。
在一个 14 节点的 Google Dataproc 集群中,我有大约 600 万个名称,它们被两个不同的系统转换为 id:sa 和 sb。每个Row 包含name、id_sa 和id_sb。我的目标是生成从id_sa 到id_sb 的映射,这样对于每个id_sa,对应的id_sb 是id_sa 附加的所有名称中最常见的ID。
让我们试着用一个例子来澄清一下。如果我有以下行:
[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 到b2 的映射。实际上,与a1 关联的名称是n1、n2 和n3,它们分别映射到b1、b2 和b2,因此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。
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql