我有一个像这样的数据框:
+---+-----+
| id|value|
+---+-----+
| a| 1|
| a| 2|
| b| 1|
| b| 3|
+---+-----+
val df = Seq(("a", 1), ("a", 2), ("b", 1), ("b", 3)).toDF("id", "value")
如何有效切换/轮换ID。注意,哈希不是我想要的,我明确希望旋转标识符。没有自我加入,如何有效地在spark中实现呢?也许一些RDD zipWithIndex
?
不是:我的意图是通过旋转标识符来对数据集进行假名/匿名化。我的要求是将每个a
替换为另一个标识符,即b
。它们都需要替换为相同的值。
我有第一个建议:https://spark.apache.org/docs/latest/ml-features.html#stringindexer,但这会更改数据类型,并且不会轮换我想防止的标识符。我需要删除,但要进行非假名化的替换。
此外,我希望ID大约有800万个(恒定)值。
答案 0 :(得分:0)
收集所有不同的元素并使用zip和这些不同元素的随机排列列表来构建地图。