我想写一个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);
}
}
答案 0 :(得分:1)
1)从文本文件
中读取mapper类映射方法中的行2)将reduce方法中的UUID如下所示添加为额外列(使用单个reducer将csv减少为extracolumn)
3)通过context.write
java.util.UUID
,自JDK 5开始提供。
要获取生成的随机字符串的值,我们需要调用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", ",");
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());
}