如何匿名化列的值

  • 本文关键字:何匿名 mapreduce
  • 更新时间 :
  • 英文 :


输入

1 - -  GET hm_brdr.gif 
2 - -  GET s102382.gif                ( "1", {"- -  GET hm_brdr.gif"})
3 - -  GET bg_stars.gif  map-reduce-> ( "2", {"- -  GET s102382.gif"}) 
3 - -  GET phrase.gif                 ( "3", {"- -  GET bg_stars.gif,"- -  GET phrase.gif"}) 

我想使用随机整数使第一列值 1,2,3.. 匿名。但它不应该像一行中的 1->x 和另一行中的 1->t 那样更改它。所以我的解决方案是在reduce步骤中用随机整数(rand(1(=x,rand(2(=y..(替换"键",并用它们的新键取消分组值并再次写入文件,如下所示。

输出文件

x - -  GET hm_brdr.gif 
y - -  GET s102382.gif       
z - -  GET bg_stars.gif    
z - -  GET phrase.gif 

我的问题是,在运行时间方面有更好的方法来做到这一点吗?

如果要

为键值分配一个随机整数,则必须在化简器中执行此操作,其中该键的所有key/value pairs都集中在一个地方。 正如@jason指出的那样,您不想分配随机数,因为无法保证不会为两个不同的键选择特定的随机数。 您可以做的只是递增在化简器上作为实例变量持有的计数器,以获取下一个可用数字以与键相关联。 如果您有少量数据,则可以使用单个化简器,并且数字将是唯一的。 如果您被迫使用多个减速器,那么您将需要稍微复杂的技术。 用

Context.getTaskTryID((.getTaskID((.getId((

获取用于计算每个键的总体唯一编号的unique reducer number

不可能是你的MapReduce作业的瓶颈。更准确地说,作业的运行时由其他问题(网络和磁盘 I/O 等(主导。一个快速的小键功能?唉。

但这甚至不是你的提案的最大问题。你的提案最大的问题是它注定要失败。关于密钥的关键事实是什么?它们用作记录的唯一标识符。随机数生成器能保证唯一性吗?没有

事实上,假设你的随机密钥空间有 365 个可能的值,只需一分钟。事实证明,如果您生成 23 个随机密钥,则更有可能发生密钥冲突;欢迎来到生日悖论。突然之间,你首先失去了键的全部意义,因为你开始通过给两个不应该有相同键的相同键来粉碎记录!

你可能会想,嗯,我的密钥空间没有 365 个可能的键那么小,它更像是 2^32 个可能的键,所以我,就像,完全清楚没有。在大约 77,000 个密钥之后,您更有可能发生冲突。

你的想法是完全站不住脚的,因为它是工作的错误工具。您需要唯一标识符。随机不能保证唯一性。获取不同的工具。

在您的情况下,您需要一个在输入键空间上注入的函数(也就是说,如果x != y,它保证f(x) != f(y)(。你没有给我足够的细节来提出任何具体的东西,但这就是你要找的。

说真的,此功能的性能不可能成为问题。作业的运行时实际上将完全由其他问题主导

编辑:

要回复您的评论:

在这里,我实际上正在尝试在日志文件中使IP号匿名,因此,如果您认为有更好的方法,我将很高兴知道。

首先,我们这里有一个严重的XY问题。你应该问搜索这个问题的答案。匿名IP地址或任何与此相关的内容都很难。您甚至还没有告诉我们"解决方案"的标准(例如,谁是攻击者?我建议在IT安全堆栈交换站点上查看此答案。

相关内容

  • 没有找到相关文章

最新更新