package ldbc.snb.datagen.serializer.small; import ldbc.snb.datagen.dictionary.Dictionaries; import ldbc.snb.datagen.objects.*; import ldbc.snb.datagen.serializer.HDFSCSVWriter; import ldbc.snb.datagen.serializer.PersonActivitySerializer; import org.apache.hadoop.conf.Configuration; import java.util.ArrayList; /** * * @author aprat */ public class CSVPersonActivitySerializer extends PersonActivitySerializer { private HDFSCSVWriter [] writers; private ArrayList<String> arguments; private String empty=""; private enum FileNames { USER_LIKES_MESSAGE ("user_likes_message"), MESSAGE("message"), USER_CREATES_MESSAGE("user_writes_message"), MESSAGE_HASTAG_TAG("message_tags_tag"), MESSAGE_REPLYOF_MESSAGE("message_replyOf_message"); private final String name; private FileNames( String name ) { this.name = name; } public String toString() { return name; } } public CSVPersonActivitySerializer() { } @Override public void initialize(Configuration conf, int reducerId) { int numFiles = FileNames.values().length; writers = new HDFSCSVWriter[numFiles]; for( int i = 0; i < numFiles; ++i) { writers[i] = new HDFSCSVWriter(conf.get("ldbc.snb.datagen.serializer.socialNetworkDir"),FileNames.values()[i].toString()+"_"+reducerId,conf.getInt("ldbc.snb.datagen.numPartitions",1),conf.getBoolean("ldbc.snb.datagen.serializer.compressed",false),"|", conf.getBoolean("ldbc.snb.datagen.serializer.endlineSeparator",false)); } arguments = new ArrayList<String>(); arguments.add("User.id"); arguments.add("Message.id"); writers[FileNames.USER_LIKES_MESSAGE.ordinal()].writeEntry(arguments); arguments.clear(); arguments.add("id"); arguments.add("body"); arguments.add("date"); writers[FileNames.MESSAGE.ordinal()].writeEntry(arguments); arguments.clear(); arguments.add("User.id"); arguments.add("Message.id"); writers[FileNames.USER_CREATES_MESSAGE.ordinal()].writeEntry(arguments); arguments.clear(); arguments.add("Message.id"); arguments.add("Tag.id"); writers[FileNames.MESSAGE_HASTAG_TAG.ordinal()].writeEntry(arguments); arguments.clear(); arguments.add("Message.id"); arguments.add("Message.id"); writers[FileNames.MESSAGE_REPLYOF_MESSAGE.ordinal()].writeEntry(arguments); arguments.clear(); } @Override public void close() { int numFiles = FileNames.values().length; for(int i = 0; i < numFiles; ++i) { writers[i].close(); } } protected void serialize( final Forum forum ) { } protected void serialize( final Post post ) { arguments.add(Long.toString(post.messageId())); arguments.add(post.content()); arguments.add(Dictionaries.dates.formatDateTime(post.creationDate())); writers[FileNames.MESSAGE.ordinal()].writeEntry(arguments); arguments.clear(); arguments.add(Long.toString(post.author().accountId())); arguments.add(Long.toString(post.messageId())); writers[FileNames.USER_CREATES_MESSAGE.ordinal()].writeEntry(arguments); arguments.clear(); for( Integer t : post.tags() ) { arguments.add(Long.toString(post.messageId())); arguments.add(Integer.toString(t)); writers[FileNames.MESSAGE_HASTAG_TAG.ordinal()].writeEntry(arguments); arguments.clear(); } } protected void serialize( final Comment comment ) { arguments.add(Long.toString(comment.messageId())); arguments.add(comment.content()); arguments.add(Dictionaries.dates.formatDateTime(comment.creationDate())); writers[FileNames.MESSAGE.ordinal()].writeEntry(arguments); arguments.clear(); if (comment.replyOf() == comment.postId()) { arguments.add(Long.toString(comment.messageId())); arguments.add(Long.toString(comment.postId())); writers[FileNames.MESSAGE_REPLYOF_MESSAGE.ordinal()].writeEntry(arguments); arguments.clear(); } else { arguments.add(Long.toString(comment.messageId())); arguments.add(Long.toString(comment.replyOf())); writers[FileNames.MESSAGE_REPLYOF_MESSAGE.ordinal()].writeEntry(arguments); arguments.clear(); } arguments.add(Long.toString(comment.author().accountId())); arguments.add(Long.toString(comment.messageId())); writers[FileNames.USER_CREATES_MESSAGE.ordinal()].writeEntry(arguments); arguments.clear(); for( Integer t : comment.tags() ) { arguments.add(Long.toString(comment.messageId())); arguments.add(Integer.toString(t)); writers[FileNames.MESSAGE_HASTAG_TAG.ordinal()].writeEntry(arguments); arguments.clear(); } } protected void serialize(final Photo photo ) { } protected void serialize( final ForumMembership membership ) { } protected void serialize( final Like like ) { arguments.add(Long.toString(like.user)); arguments.add(Long.toString(like.messageId)); writers[FileNames.USER_LIKES_MESSAGE.ordinal()].writeEntry(arguments); arguments.clear(); } public void reset() { } }