如何在Mapreduce中生成UUID?

时间:2017-07-07 19:48:06

标签: java hadoop apache-spark mapreduce bigdata

我想写一个MapReduce java程序,我需要在csv / txt文件中为一组数据创建UUID。数据将是具有行和列集的客户数据。输入csv位于HDFS目录中。

只需要使用Mapreduce生成UUID。 我有一个输入文件,其中包含col,a,b和c,并且有5行。 我需要一个带有UUID的列d,有5行,即5个不同的UUID

我该怎么办呢?

以下是Mapper类的代码:

公共类MapRed_Mapper扩展了Mapper {

public void map(Text key, Text value, Context context) throws IOException, InterruptedException
{
     Text uuid = new Text(UUID.randomUUID().toString());
    context.write(key, uuid);
}

}

2 个答案:

答案 0 :(得分:1)

  • Mapreduce java方法

1)从文本文件

中读取mapper类映射方法中的行

2)将reduce方法中的UUID如下所示添加为额外列(使用单个reducer将csv减少为extracolumn)

3)通过context.write

发出

java.util.UUID,自JDK 5开始提供。

创建随机UUID(通用唯一标识符)。

要获取生成的随机字符串的值,我们需要调用UUID.toString()方法。

    UUID uuid = UUID.randomUUID();
    String randomUUIDString = uuid.toString();

    System.out.println("Random UUID String = " + randomUUIDString);
   // System.out.println("UUID version       = " + uuid.version());
   // System.out.println("UUID variant       = " + uuid.variant());

对于CSV生成:
使用TextOutputFormat。默认键/值分隔符是制表符。通过在驱动程序中设置属性mapred.textoutputformat.separatorText来更改分隔符。

conf.set("mapred.textoutputformat.separatorText", ",");
  • Spark方法(因为你添加了火花标记,我想在指针下方给出):

SO中已有答案,请参阅。

add-a-new-column-to-a-dataframe-new-column-i-want-it-to-be-a-uuid-generator

然后你可以在下面转换为csv格式。

df.write.format("com.databricks.spark.csv").save(filepath)

答案 1 :(得分:0)

也许我没有得到问题,但您可以通过执行以下操作为每个映射调用生成一个UUID:

@Override
public void map(Text key, Text value, Context context) throws IOException, InterruptedException
{
    context.write(key, new Text(UUID.randomUUID().toString());
}