mapreduce-如何匿名化列';s值 输入
我想将第一列的值设为1,2,3。。匿名使用随机整数。但它不应该像一行中的1->x和另一行中的1->t那样改变它。因此,我的解决方案是在reduce步骤中将“键”替换为随机整数(rand(1)=x,rand(2)=y..),并用新键将值解组,然后再次写入文件,如下所示 输出文件 我的问题是,有没有更好的方法通过运行时间来实现这一点?这绝对不是MapReduce工作的瓶颈。更准确地说,作业的运行时主要由其他问题(网络和磁盘I/O等)控制。一个快速的按键功能?嗯 但这甚至不是你提案的最大问题。你的提案最大的问题是它注定要失败。关于钥匙的关键事实是什么?它们充当记录的唯一标识符。随机数生成器是否保证唯一性否 事实上,假设您的随机密钥空间有365个可能的值。结果表明,如果你只生成23个随机密钥,你就更有可能发生密钥冲突;欢迎来到这里。突然之间,你失去了所有的关键点,因为你已经开始打破记录,给两个不应该有相同的关键相同的关键 你可能会想,我的钥匙空间没有365个可能的钥匙那么小,它更像是2^32个可能的钥匙,所以我完全清楚了否。在大约77000个关键点之后,您更有可能发生碰撞 你的想法完全站不住脚,因为这是一个错误的工作工具。您需要唯一的标识符。随机性不能保证唯一性。换一个不同的工具 在您的情况下,您需要一个位于输入键空间上的函数(即,它保证mapreduce-如何匿名化列';s值 输入,mapreduce,Mapreduce,我想将第一列的值设为1,2,3。。匿名使用随机整数。但它不应该像一行中的1->x和另一行中的1->t那样改变它。因此,我的解决方案是在reduce步骤中将“键”替换为随机整数(rand(1)=x,rand(2)=y..),并用新键将值解组,然后再次写入文件,如下所示 输出文件 我的问题是,有没有更好的方法通过运行时间来实现这一点?这绝对不是MapReduce工作的瓶颈。更准确地说,作业的运行时主要由其他问题(网络和磁盘I/O等)控制。一个快速的按键功能?嗯 但这甚至不是你提案的最大问题。你的提案
f(x)!=f(y)
ifx!=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