mapreduce-如何匿名化列';s值 输入

mapreduce-如何匿名化列';s值 输入,mapreduce,Mapreduce,我想将第一列的值设为1,2,3。。匿名使用随机整数。但它不应该像一行中的1->x和另一行中的1->t那样改变它。因此,我的解决方案是在reduce步骤中将“键”替换为随机整数(rand(1)=x,rand(2)=y..),并用新键将值解组,然后再次写入文件,如下所示 输出文件 我的问题是,有没有更好的方法通过运行时间来实现这一点?这绝对不是MapReduce工作的瓶颈。更准确地说,作业的运行时主要由其他问题(网络和磁盘I/O等)控制。一个快速的按键功能?嗯 但这甚至不是你提案的最大问题。你的提案

我想将第一列的值设为1,2,3。。匿名使用随机整数。但它不应该像一行中的1->x和另一行中的1->t那样改变它。因此,我的解决方案是在reduce步骤中将“键”替换为随机整数(rand(1)=x,rand(2)=y..),并用新键将值解组,然后再次写入文件,如下所示

输出文件 我的问题是,有没有更好的方法通过运行时间来实现这一点?

这绝对不是MapReduce工作的瓶颈。更准确地说,作业的运行时主要由其他问题(网络和磁盘I/O等)控制。一个快速的按键功能?嗯

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

事实上,假设您的随机密钥空间有365个可能的值。结果表明,如果你只生成23个随机密钥,你就更有可能发生密钥冲突;欢迎来到这里。突然之间,你失去了所有的关键点,因为你已经开始打破记录,给两个不应该有相同的关键相同的关键

你可能会想,我的钥匙空间没有365个可能的钥匙那么小,它更像是2^32个可能的钥匙,所以我完全清楚了。在大约77000个关键点之后,您更有可能发生碰撞

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

在您的情况下,您需要一个位于输入键空间上的函数(即,它保证
f(x)!=f(y)
if
x!=y
)。你没有给我足够的细节来提出任何具体的建议,但那正是你想要的

说真的,这个功能的性能不可能成为问题。你的工作的运行时间真的会完全被其他问题所支配

编辑: 回应你的提问:

在这里,我实际上是想让ip号码在日志文件中匿名,所以如果你认为有更好的方法,我很乐意知道


首先,我们有一个严重的问题。你应该问我这个问题的答案。匿名化IP地址,或者任何与此相关的东西,都是很困难的。您甚至没有告诉我们“解决方案”的标准(例如,谁是攻击者?)。我建议您在网站上查看这一点。

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

Context.gettaskattentid().getTaskID().getId()


要获得一个
唯一的减速机编号
,用它来计算每个键的整体唯一编号。

我理解,我是在reduce步骤中这样做的,所以键已经是唯一的,但随机值并不能保证如您所指出的那样。谢谢,谢谢,我已经在减少步骤中做了。现在我知道我不能使用随机数。在这里,我实际上是想让ip号码在日志文件中匿名,所以如果你认为有更好的方法,我很乐意知道。@proofmoore:请查看我对我的ip地址所做的编辑。
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"}) 
x - -  GET hm_brdr.gif 
y - -  GET s102382.gif       
z - -  GET bg_stars.gif    
z - -  GET phrase.gif