切换spark中的标识符以假名化数据集

时间:2018-08-07 09:53:31

标签: apache-spark apache-spark-sql

我有一个像这样的数据框:

+---+-----+
| 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万个(恒定)值。

1 个答案:

答案 0 :(得分:0)

收集所有不同的元素并使用zip和这些不同元素的随机排列列表来构建地图。