如何在 Mapreduce 中生成 UUID?

How to generate UUID in Mapreduce?

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

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

我该怎么做?

这是 Mapper class 的代码:

public class MapRed_Mapper 扩展映射器{

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

}

  • Mapreduce java 方法

1) 从文本文件

读取映射器class映射方法中的行

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

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。默认的键/值分隔符是制表符 character.Change 通过在您的驱动程序中设置 属性 mapred.textoutputformat.separatorText 分隔符。

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

SO 中已有答案,请参阅。

然后你可以按照下面的方法转换成csv格式。

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

也许我没听懂问题,但您可以通过执行以下操作为每次调用 map 生成一个 UUID:

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