From b3ec4194dab90f8bc36ff0f0e49e5dc8e1e6e217 Mon Sep 17 00:00:00 2001 From: miconis Date: Thu, 11 Jun 2020 10:46:46 +0200 Subject: [PATCH] implementation of the test for the dedup and addition of new support classes --- .../src/main/java/eu/dnetlib/Deduper.java | 214 ++++++++++++------ .../eu/dnetlib/graph/GraphProcessor.scala | 26 +-- .../eu/dnetlib/pace/utils/BlockUtils.java | 4 +- .../java/eu/dnetlib/pace/utils/Utility.java | 14 ++ .../main/java/eu/dnetlib/support/Block.java | 93 +++++--- .../dnetlib/support/ConnectedComponent.java | 110 ++++----- .../eu/dnetlib/support/DnetAccumulator.java | 2 +- .../java/eu/dnetlib/support/Relation.java | 50 ++++ .../java/eu/dnetlib/pace/DedupLocalTest.java | 125 +++------- .../java/eu/dnetlib/pace/DedupTestUtils.java | 46 ++-- .../examples/organization/organization.gz | Bin 0 -> 96541 bytes dnet-pace-core/release.properties | 11 + 12 files changed, 394 insertions(+), 301 deletions(-) create mode 100644 dnet-dedup-test/src/main/java/eu/dnetlib/support/Relation.java create mode 100644 dnet-dedup-test/src/test/resources/eu/dnetlib/pace/examples/organization/organization.gz create mode 100644 dnet-pace-core/release.properties diff --git a/dnet-dedup-test/src/main/java/eu/dnetlib/Deduper.java b/dnet-dedup-test/src/main/java/eu/dnetlib/Deduper.java index 2bc3799..39426a7 100644 --- a/dnet-dedup-test/src/main/java/eu/dnetlib/Deduper.java +++ b/dnet-dedup-test/src/main/java/eu/dnetlib/Deduper.java @@ -1,5 +1,6 @@ package eu.dnetlib; +import com.google.common.hash.Hashing; import eu.dnetlib.graph.GraphProcessor; import eu.dnetlib.pace.config.DedupConfig; import eu.dnetlib.pace.model.MapDocument; @@ -7,105 +8,182 @@ import eu.dnetlib.pace.util.BlockProcessor; import eu.dnetlib.pace.util.MapDocumentUtil; import eu.dnetlib.pace.utils.Utility; import eu.dnetlib.reporter.SparkReporter; +import eu.dnetlib.support.Block; import eu.dnetlib.support.ConnectedComponent; +import eu.dnetlib.support.Relation; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; -import org.apache.spark.api.java.Optional; +import org.apache.spark.api.java.function.MapFunction; +import org.apache.spark.api.java.function.PairFunction; import org.apache.spark.graphx.Edge; import org.apache.spark.rdd.RDD; +import org.apache.spark.sql.Dataset; +import org.apache.spark.sql.Encoders; +import org.apache.spark.sql.SaveMode; +import org.apache.spark.sql.SparkSession; import org.apache.spark.util.LongAccumulator; import scala.Serializable; import scala.Tuple2; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; +import java.util.stream.StreamSupport; public class Deduper implements Serializable { private static final Log log = LogFactory.getLog(Deduper.class); - /** - * @param: the spark context - * @param: list of JSON entities to be deduped - * @param: the dedup configuration - * - * @return the list of connected components generated by the deduplication - */ - public static JavaRDD dedup(JavaSparkContext context, JavaRDD entities, DedupConfig config){ + public static JavaPairRDD createSortedBlocks( + JavaPairRDD mapDocs, DedupConfig config) { + final String of = config.getWf().getOrderField(); + final int maxQueueSize = config.getWf().getGroupMaxSize(); + return mapDocs + // the reduce is just to be sure that we haven't document with same id + .reduceByKey((a, b) -> a) + .map(Tuple2::_2) + // Clustering: from to List + .flatMap( + a -> Utility + .getGroupingKeys(config, a) + .stream() + .map(it -> Block.from(it, a)) + .collect(Collectors.toList()) + .iterator()) + .mapToPair(block -> new Tuple2<>(block.getKey(), block)) + .reduceByKey((b1, b2) -> Block.from(b1, b2, of, maxQueueSize)); + } + + public static Iterator> ccToMergeRel(ConnectedComponent cc, DedupConfig dedupConf) { + return cc + .getDocs() + .stream() + .flatMap( + id -> { + List> tmp = new ArrayList<>(); + tmp.add(new Tuple2<>(cc.getCcId(), id)); + return tmp.stream(); + }) + .iterator(); + } + + public static long hash(final String id) { + return Hashing.murmur3_128().hashString(id).asLong(); + } + + public static ConnectedComponent entityMerger(String key, Iterator values) { + + ConnectedComponent cc = new ConnectedComponent(); + cc.setCcId(key); + cc.setDocs(StreamSupport.stream(Spliterators.spliteratorUnknownSize(values, Spliterator.ORDERED), false) + .collect(Collectors.toSet())); + return cc; + } + + public static JavaRDD computeRelations( + JavaSparkContext context, JavaPairRDD blocks, DedupConfig config) { Map accumulators = Utility.constructAccumulator(config, context.sc()); - //create vertexes of the graph: - JavaPairRDD mapDocs = mapToVertexes(context, entities, config); - RDD> vertexes = mapDocs.mapToPair(t -> new Tuple2(Utility.getHashcode(t._1()), t._2())).rdd(); - - //create blocks for deduplication - JavaPairRDD> blocks = createBlocks(context, mapDocs, config); - - //create relations by comparing only elements in the same group - final JavaPairRDD relationRDD = computeRelations(context, blocks, config); - - System.out.println("Number of relations = " + relationRDD.distinct().count()); - - final RDD> edgeRdd = relationRDD.map(it -> new Edge<>(Utility.getHashcode(it._1()),Utility.getHashcode(it._2()), "isSimilarTo")).rdd(); - - accumulators.forEach((name, acc) -> log.info(name + " -> " + acc.value())); - - return GraphProcessor.findCCs(vertexes, edgeRdd, config.getWf().getMaxIterations()).toJavaRDD(); + return blocks + .flatMapToPair( + it -> { + final SparkReporter reporter = new SparkReporter(accumulators); + new BlockProcessor(config) + .processSortedBlock(it._1(), it._2().getDocuments(), reporter); + return reporter.getRelations().iterator(); + }) + .mapToPair(it -> new Tuple2<>(it._1() + it._2(), new Relation(it._1(), it._2(), "simRel"))) + .reduceByKey((a, b) -> a) + .map(Tuple2::_2); } - /** - * @param: the spark context - * @param: list of blocks - * @param: the dedup configuration - * - * @return the list of relations generated by the deduplication - */ - public static JavaPairRDD computeRelations(JavaSparkContext context, JavaPairRDD> blocks, DedupConfig config) { + public static void createSimRels(DedupConfig dedupConf, SparkSession spark, String entitiesPath, String simRelsPath){ - Map accumulators = Utility.constructAccumulator(config, context.sc()); - return blocks.flatMapToPair(it -> { - final SparkReporter reporter = new SparkReporter(accumulators); - new BlockProcessor(config).process(it._1(), it._2(), reporter); - return reporter.getRelations().iterator(); - }); + JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + + JavaPairRDD mapDocuments = sc + .textFile(entitiesPath) + .mapToPair( + (PairFunction) s -> { + MapDocument d = MapDocumentUtil.asMapDocumentWithJPath(dedupConf, s); + return new Tuple2<>(d.getIdentifier(), d); + }); + + // create blocks for deduplication + JavaPairRDD blocks = Deduper.createSortedBlocks(mapDocuments, dedupConf); + + // create relations by comparing only elements in the same group + JavaRDD relations = Deduper.computeRelations(sc, blocks, dedupConf); + + // save the simrel in the workingdir + spark + .createDataset(relations.rdd(), Encoders.bean(Relation.class)) + .write() + .mode(SaveMode.Overwrite) + .save(simRelsPath); } - /** - * @param: the spark context - * @param: list of entities: - * @param: the dedup configuration - * - * @return the list of blocks based on clustering of dedup configuration - */ - public static JavaPairRDD> createBlocks(JavaSparkContext context, JavaPairRDD mapDocs, DedupConfig config) { + public static void createMergeRels(DedupConfig dedupConf, String entitiesPath, String mergeRelsPath, String simRelsPath, SparkSession spark){ - return mapDocs.reduceByKey((a, b) -> a) //the reduce is just to be sure that we haven't document with same id - //Clustering: from to List - .flatMapToPair(a -> { - final MapDocument currentDocument = a._2(); + final int maxIterations = dedupConf.getWf().getMaxIterations(); - return Utility.getGroupingKeys(config, currentDocument).stream() - .map(it -> new Tuple2<>(it, currentDocument)).collect(Collectors.toList()).iterator(); - }).groupByKey(); + JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext()); + final JavaPairRDD vertexes = sc + .textFile(entitiesPath) + .map(s -> MapDocumentUtil.getJPathString(dedupConf.getWf().getIdPath(), s)) + .mapToPair((PairFunction) s -> new Tuple2<>(hash(s), s)); + + final RDD> edgeRdd = spark + .read() + .load(simRelsPath) + .as(Encoders.bean(Relation.class)) + .javaRDD() + .map(Relation::toEdgeRdd) + .rdd(); + + final Dataset mergeRels = spark + .createDataset( + GraphProcessor + .findCCs(vertexes.rdd(), edgeRdd, maxIterations) + .toJavaRDD() + .filter(k -> k.getDocs().size() > 1) + .flatMap(cc -> ccToMergeRel(cc, dedupConf)) + .map(it -> new Relation(it._1(), it._2(), "mergeRel")) + .rdd(), + Encoders.bean(Relation.class)); + + mergeRels.write().mode(SaveMode.Overwrite).parquet(mergeRelsPath); } - /** - * @param: the spark context - * @param: list of JSON entities - * @param: the dedup configuration - * - * @return the list of vertexes: - */ - public static JavaPairRDD mapToVertexes(JavaSparkContext context, JavaRDD entities, DedupConfig config){ - return entities.mapToPair(it -> { - MapDocument mapDocument = MapDocumentUtil.asMapDocumentWithJPath(config, it); - return new Tuple2<>(mapDocument.getIdentifier(), mapDocument); - }); + public static void createDedupEntity(DedupConfig dedupConf, String mergeRelsPath, String entitiesPath, SparkSession spark, String dedupEntityPath){ + + JavaPairRDD entities = spark + .read() + .textFile(entitiesPath) + .map((MapFunction>) it -> + new Tuple2<>(MapDocumentUtil.getJPathString(dedupConf.getWf().getIdPath(), it), it), + Encoders.tuple(Encoders.STRING(), Encoders.STRING())) + .toJavaRDD() + .mapToPair(t -> t); + + // : source is the dedup_id, target is the id of the mergedIn + JavaPairRDD mergeRels = spark + .read() + .load(mergeRelsPath) + .as(Encoders.bean(Relation.class)) + .toJavaRDD() + .mapToPair(r -> new Tuple2<>(r.getTarget(), r)); + + JavaRDD dedupEntities = mergeRels.join(entities) + .mapToPair(t -> new Tuple2<>(t._2()._1().getSource(), t._2()._2())) + .groupByKey() + .map(t-> entityMerger(t._1(), t._2().iterator())); + + dedupEntities.saveAsTextFile(dedupEntityPath); } } \ No newline at end of file diff --git a/dnet-dedup-test/src/main/java/eu/dnetlib/graph/GraphProcessor.scala b/dnet-dedup-test/src/main/java/eu/dnetlib/graph/GraphProcessor.scala index 4ac090f..8a8974b 100644 --- a/dnet-dedup-test/src/main/java/eu/dnetlib/graph/GraphProcessor.scala +++ b/dnet-dedup-test/src/main/java/eu/dnetlib/graph/GraphProcessor.scala @@ -1,6 +1,5 @@ package eu.dnetlib.graph -import eu.dnetlib.pace.model.MapDocument import eu.dnetlib.support.ConnectedComponent import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD @@ -9,30 +8,29 @@ import scala.collection.JavaConversions; object GraphProcessor { - def findCCs(vertexes: RDD[(VertexId, MapDocument)], edges: RDD[Edge[String]], maxIterations: Int): RDD[ConnectedComponent] = { - val graph: Graph[MapDocument, String] = Graph(vertexes, edges).partitionBy(PartitionStrategy.RandomVertexCut) //TODO remember to remove partitionby + def findCCs(vertexes: RDD[(VertexId, String)], edges: RDD[Edge[String]], maxIterations: Int): RDD[ConnectedComponent] = { + val graph: Graph[String, String] = Graph(vertexes, edges).partitionBy(PartitionStrategy.RandomVertexCut) //TODO remember to remove partitionby val cc = graph.connectedComponents(maxIterations).vertices val joinResult = vertexes.leftOuterJoin(cc).map { - case (id, (openaireId, cc)) => { + case (id, (rawId, cc)) => { if (cc.isEmpty) { - (id, openaireId) + (id, rawId) } else { - (cc.get, openaireId) + (cc.get, rawId) } } } - - val connectedComponents = joinResult.groupByKey().map[ConnectedComponent](cc => asConnectedComponent(cc)) - - (connectedComponents) - + val connectedComponents = joinResult.groupByKey() + .map[ConnectedComponent](cc => asConnectedComponent(cc)) + connectedComponents } - def asConnectedComponent(group: (VertexId, Iterable[MapDocument])): ConnectedComponent = { - val docs = group._2.toSet[MapDocument] - val connectedComponent = new ConnectedComponent(JavaConversions.setAsJavaSet[MapDocument](docs)); + + def asConnectedComponent(group: (VertexId, Iterable[String])): ConnectedComponent = { + val docs = group._2.toSet[String] + val connectedComponent = new ConnectedComponent(JavaConversions.setAsJavaSet[String](docs)); connectedComponent } diff --git a/dnet-dedup-test/src/main/java/eu/dnetlib/pace/utils/BlockUtils.java b/dnet-dedup-test/src/main/java/eu/dnetlib/pace/utils/BlockUtils.java index 9ac1c93..27c9e2e 100644 --- a/dnet-dedup-test/src/main/java/eu/dnetlib/pace/utils/BlockUtils.java +++ b/dnet-dedup-test/src/main/java/eu/dnetlib/pace/utils/BlockUtils.java @@ -135,7 +135,7 @@ public class BlockUtils implements Serializable { System.out.println("optimalBlockSize = " + optimalBlockSize); - return blocks.filter(b -> b.getElements().size() < optimalBlockSize); + return blocks.filter(b -> b.elements() < optimalBlockSize); } //cut blocks basing on number of comparisons @@ -152,7 +152,7 @@ public class BlockUtils implements Serializable { double RATIO = 0.85; return blocks - .flatMapToPair(b -> b.getElements().stream().map(e -> new Tuple2<>(e, new Tuple2<>(b.getKey(), b.comparisons()))).iterator()) + .flatMapToPair(b -> b.getDocuments().stream().map(e -> new Tuple2<>(e, new Tuple2<>(b.getKey(), b.comparisons()))).iterator()) .groupByKey() .mapToPair(es -> { List> b = Lists.newArrayList(es._2()); diff --git a/dnet-dedup-test/src/main/java/eu/dnetlib/pace/utils/Utility.java b/dnet-dedup-test/src/main/java/eu/dnetlib/pace/utils/Utility.java index 6dd80f6..d392bf1 100644 --- a/dnet-dedup-test/src/main/java/eu/dnetlib/pace/utils/Utility.java +++ b/dnet-dedup-test/src/main/java/eu/dnetlib/pace/utils/Utility.java @@ -5,6 +5,7 @@ import com.google.common.hash.Hashing; import eu.dnetlib.pace.clustering.BlacklistAwareClusteringCombiner; import eu.dnetlib.pace.config.DedupConfig; import eu.dnetlib.pace.model.MapDocument; +import org.apache.commons.codec.binary.Hex; import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; @@ -18,6 +19,7 @@ import org.apache.spark.util.LongAccumulator; import java.io.IOException; import java.io.StringWriter; import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -83,4 +85,16 @@ public class Utility { public static long getHashcode(final String id) { return Hashing.murmur3_128().hashUnencodedChars(id).asLong(); } + + public static String md5(final String s) { + try { + final MessageDigest md = MessageDigest.getInstance("MD5"); + md.update(s.getBytes(StandardCharsets.UTF_8)); + return new String(Hex.encodeHex(md.digest())); + } catch (final Exception e) { + System.err.println("Error creating id"); + return null; + } + } + } diff --git a/dnet-dedup-test/src/main/java/eu/dnetlib/support/Block.java b/dnet-dedup-test/src/main/java/eu/dnetlib/support/Block.java index 3863b1c..acbb9ec 100644 --- a/dnet-dedup-test/src/main/java/eu/dnetlib/support/Block.java +++ b/dnet-dedup-test/src/main/java/eu/dnetlib/support/Block.java @@ -1,29 +1,68 @@ package eu.dnetlib.support; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.pace.model.MapDocument; -import eu.dnetlib.pace.util.PaceException; - -import java.io.IOException; import java.io.Serializable; -import java.util.Arrays; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; +import java.util.stream.Stream; import java.util.stream.StreamSupport; +import com.google.common.collect.Lists; + +import eu.dnetlib.pace.model.MapDocument; + public class Block implements Serializable { - String key; - List elements; + private String key; - public Block(String key, Iterable elements){ - this.key = key; - this.elements = StreamSupport.stream(elements.spliterator(), false).collect(Collectors.toList()); + private List documents; + + public Block() { + super(); } - public Block(String key, List elements){ + public Block(String key, Iterable documents) { this.key = key; - this.elements = elements; + this.documents = Lists.newArrayList(documents); + } + + public static Block from(String key, MapDocument doc) { + Block block = new Block(); + block.setKey(key); + block.setDocuments(Lists.newArrayList(doc)); + return block; + } + + public static Block from(String key, Iterator blocks, String orderField, int maxSize) { + Block block = new Block(); + block.setKey(key); + + Iterable it = () -> blocks; + + block + .setDocuments( + StreamSupport + .stream(it.spliterator(), false) + .flatMap(b -> b.getDocuments().stream()) + .sorted(Comparator.comparing(a -> a.getFieldMap().get(orderField).stringValue())) + .limit(maxSize) + .collect(Collectors.toCollection(ArrayList::new))); + return block; + } + + public static Block from(Block b1, Block b2, String orderField, int maxSize) { + Block block = new Block(); + block.setKey(b1.getKey()); + block + .setDocuments( + Stream + .concat(b1.getDocuments().stream(), b2.getDocuments().stream()) + .sorted(Comparator.comparing(a -> a.getFieldMap().get(orderField).stringValue())) + .limit(maxSize) + .collect(Collectors.toCollection(ArrayList::new))); + return block; } public String getKey() { @@ -34,30 +73,22 @@ public class Block implements Serializable { this.key = key; } - public List getElements() { - return elements; + public List getDocuments() { + return documents; } - public void setElements(List elements) { - this.elements = elements; + public void setDocuments(List documents) { + this.documents = documents; } - public int comparisons(){ - int size = elements.size(); - return (size*(size-1)/2); + public int comparisons() { + return (documents.size()*(documents.size()-1))/2; } - public int elements(){ - return elements.size(); + public int elements() { + return documents.size(); } - @Override - public String toString(){ - ObjectMapper mapper = new ObjectMapper(); - try { - return mapper.writeValueAsString(this); - } catch (IOException e) { - throw new PaceException("Failed to create Json: ", e); - } - } + } + diff --git a/dnet-dedup-test/src/main/java/eu/dnetlib/support/ConnectedComponent.java b/dnet-dedup-test/src/main/java/eu/dnetlib/support/ConnectedComponent.java index b9cd3a6..7f02c34 100644 --- a/dnet-dedup-test/src/main/java/eu/dnetlib/support/ConnectedComponent.java +++ b/dnet-dedup-test/src/main/java/eu/dnetlib/support/ConnectedComponent.java @@ -1,89 +1,61 @@ package eu.dnetlib.support; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.pace.model.Field; -import eu.dnetlib.pace.model.MapDocument; -import eu.dnetlib.pace.util.PaceException; -import org.codehaus.jackson.annotate.JsonIgnore; - import java.io.IOException; import java.io.Serializable; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; + +import eu.dnetlib.pace.utils.Utility; +import org.apache.commons.lang.StringUtils; +import org.codehaus.jackson.annotate.JsonIgnore; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import eu.dnetlib.pace.util.PaceException; public class ConnectedComponent implements Serializable { - private Set docs; - private String id; - private Map fieldMap; + private Set docs; + private String ccId; public ConnectedComponent() { } - public ConnectedComponent(Set docs) { + public ConnectedComponent(Set docs) { this.docs = docs; - this.id = createID(docs); - this.fieldMap = chooseFields(docs); + createID(); } - public Set getDocs() { - return docs; - } - - public void setDocs(Set docs) { - this.docs = docs; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public Map chooseFields(Set docs) { - - int maxLength = 0; - Map maxFieldMap = new HashMap<>(); - for (MapDocument doc : docs) { - if (doc.toString().length()>maxLength){ - maxFieldMap = doc.getFieldMap(); - maxLength = doc.toString().length(); - } - } - - return maxFieldMap; - } - - public String createID(Set docs) { + public String createID() { if (docs.size() > 1) { - String ccID = getMin(docs.stream().map(doc -> doc.getIdentifier()).collect(Collectors.toList())); - String prefix = ccID.split("\\|")[0]; - String id = ccID.split("::")[1]; - return prefix + "|dedup_______::" + id; + final String s = getMin(); + ccId = "dedup::" + Utility.md5(s); + return ccId; } else { - return docs.iterator().next().getIdentifier(); + return docs.iterator().next(); } } @JsonIgnore - public String getMin(List ids){ + public String getMin() { - String min = ids.get(0); - for(String id: ids) - if (min.compareTo(id) > 0) { - min = id; - } - - return min; + final StringBuilder min = new StringBuilder(); + docs + .forEach( + i -> { + if (StringUtils.isBlank(min.toString())) { + min.append(i); + } else { + if (min.toString().compareTo(i) > 0) { + min.setLength(0); + min.append(i); + } + } + }); + return min.toString(); } @Override - public String toString(){ + public String toString() { ObjectMapper mapper = new ObjectMapper(); try { return mapper.writeValueAsString(this); @@ -92,11 +64,19 @@ public class ConnectedComponent implements Serializable { } } - public Map getFieldMap() { - return fieldMap; + public Set getDocs() { + return docs; } - public void setFieldMap(Map fieldMap) { - this.fieldMap = fieldMap; + public void setDocs(Set docs) { + this.docs = docs; + } + + public String getCcId() { + return ccId; + } + + public void setCcId(String ccId) { + this.ccId = ccId; } } diff --git a/dnet-dedup-test/src/main/java/eu/dnetlib/support/DnetAccumulator.java b/dnet-dedup-test/src/main/java/eu/dnetlib/support/DnetAccumulator.java index e475c0d..1cd19d4 100644 --- a/dnet-dedup-test/src/main/java/eu/dnetlib/support/DnetAccumulator.java +++ b/dnet-dedup-test/src/main/java/eu/dnetlib/support/DnetAccumulator.java @@ -4,7 +4,7 @@ import org.apache.spark.util.AccumulatorV2; public class DnetAccumulator extends AccumulatorV2 { - private Long counter= 0L; + private Long counter = 0L; private String group; diff --git a/dnet-dedup-test/src/main/java/eu/dnetlib/support/Relation.java b/dnet-dedup-test/src/main/java/eu/dnetlib/support/Relation.java new file mode 100644 index 0000000..71d2d1b --- /dev/null +++ b/dnet-dedup-test/src/main/java/eu/dnetlib/support/Relation.java @@ -0,0 +1,50 @@ +package eu.dnetlib.support; + +import eu.dnetlib.Deduper; +import org.apache.spark.graphx.Edge; + +import java.io.Serializable; + +public class Relation implements Serializable { + + String source; + String target; + String type; + + public Relation() { + } + + public Relation(String source, String target, String type) { + this.source = source; + this.target = target; + this.type = type; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public Edge toEdgeRdd(){ + return new Edge<>(Deduper.hash(source), Deduper.hash(target), type); + } +} diff --git a/dnet-dedup-test/src/test/java/eu/dnetlib/pace/DedupLocalTest.java b/dnet-dedup-test/src/test/java/eu/dnetlib/pace/DedupLocalTest.java index f00880d..e28ef30 100644 --- a/dnet-dedup-test/src/test/java/eu/dnetlib/pace/DedupLocalTest.java +++ b/dnet-dedup-test/src/test/java/eu/dnetlib/pace/DedupLocalTest.java @@ -24,121 +24,52 @@ import java.util.Map; public class DedupLocalTest extends DedupTestUtils { - JavaSparkContext context; - JavaRDD entities; + SparkSession spark; DedupConfig config; - TreeProcessor treeProcessor; + JavaSparkContext context; + + final String entitiesPath = "/Users/miconis/IdeaProjects/DnetDedup/dnet-dedup/dnet-dedup-test/src/test/resources/eu/dnetlib/pace/examples/organization"; @Before public void setup() { config = DedupConfig.load(Utility.readFromClasspath("/eu/dnetlib/pace/config/organization.current.conf.json", DedupLocalTest.class)); - treeProcessor = new TreeProcessor(config); - final SparkSession spark = SparkSession + spark = SparkSession .builder() .appName("Deduplication") .master("local[*]") .getOrCreate(); - context = new JavaSparkContext(spark.sparkContext()); - - final URL dataset = getClass().getResource("/eu/dnetlib/pace/examples/organizations.custom.dump.json"); - entities = context.textFile(dataset.getPath()); + context = JavaSparkContext.fromSparkContext(spark.sparkContext()); } - @Ignore @Test - public void dedupTest(){ + public void deduplicationTest() { - JavaRDD ccs = Deduper.dedup(context, entities, config); + Deduper.createSimRels( + config, + spark, + entitiesPath, + "/tmp/deduptest/organization_simrel" + ); - printStatistics(ccs); + Deduper.createMergeRels( + config, + entitiesPath, + "/tmp/deduptest/organization_mergerel", + "/tmp/deduptest/organization_simrel", + spark + ); + + Deduper.createDedupEntity( + config, + "/tmp/deduptest/organization_mergerel", + entitiesPath, + spark, + "/tmp/deduptest/dedupentity" + ); } - @Ignore - @Test - public void relationsTest() { - - List entitiesList = entities.collect(); - - //create vertexes of the graph: - JavaPairRDD mapDocs = Deduper.mapToVertexes(context, entities, config); - Map docsMap = mapDocs.collectAsMap(); - - //create blocks for deduplication - JavaPairRDD> blocks = Deduper.createBlocks(context, mapDocs, config); - - //create relations by comparing only elements in the same group - JavaPairRDD relationRDD = Deduper.computeRelations(context, blocks, config); - - List> rels = relationRDD - .filter(rel -> { - String c1 = docsMap.get(rel._1()).getFieldMap().get("country").stringValue(); - String c2 = docsMap.get(rel._2()).getFieldMap().get("country").stringValue(); - return !c1.isEmpty() && !c2.isEmpty(); - }) - .filter(rel -> { - String w1 = docsMap.get(rel._1()).getFieldMap().get("websiteurl").stringValue(); - String w2 = docsMap.get(rel._2()).getFieldMap().get("websiteurl").stringValue(); - return (!w1.isEmpty() && !w2.isEmpty()) && w1.equals(w2); - }) - .collect(); - -// List> rels = relationRDD -// .filter(rel -> { -// String legalname1 = getOrganizationLegalname(docsMap.get(rel._1())) -// .replaceAll("–", " ") -// .replaceAll("&", " ") -// .replaceAll(""", " ") -// .replaceAll("−", " ") -// .replaceAll("([0-9]+)", " $1 ") -// .replaceAll("[^\\p{ASCII}]", "") -// .replaceAll("[\\p{Punct}]", " ") -// .replaceAll("\\n", " ") -// .replaceAll("(?m)\\s+", " ") -// .toLowerCase() -// .trim(); -// String legalname2 = getOrganizationLegalname(docsMap.get(rel._2())) -// .replaceAll("–", " ") -// .replaceAll("&", " ") -// .replaceAll(""", " ") -// .replaceAll("−", " ") -// .replaceAll("([0-9]+)", " $1 ") -// .replaceAll("[^\\p{ASCII}]", "") -// .replaceAll("[\\p{Punct}]", " ") -// .replaceAll("\\n", " ") -// .replaceAll("(?m)\\s+", " ") -// .toLowerCase() -// .trim(); -// return !legalname1.equals(legalname2); -// }) -// .collect(); - - System.out.println("Dubious relations = " + rels.size()); - - for (Tuple2 rel : rels) { - System.out.println(rel._1() + " ---> " + rel._2()); - System.out.println(treeProcessor.evaluateTree(docsMap.get(rel._1()), docsMap.get(rel._2()))); - System.out.println("---------------------------------------------"); - } - - } - - @Ignore - @Test - public void matchTest(){ - - String JSONEntity1 = "{\"eclegalbody\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}, \"ecresearchorganization\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}, \"logourl\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}, \"pid\": [{\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"qualifier\": {\"classid\": \"grid\", \"classname\": \"grid\", \"schemeid\": \"dnet:pid_types\", \"schemename\": \"dnet:pid_types\"}, \"value\": \"grid.443291.9\"}], \"websiteurl\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}, \"ecnutscode\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}, \"legalname\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"Universitas Hindu Indonesia\"}, \"collectedfrom\": [{\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"key\": \"10|openaire____::ff4a008470319a22d9cf3d14af485977\", \"value\": \"GRID - Global Research Identifier Database\"}], \"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"UNKNOWN\", \"classname\": \"UNKNOWN\", \"schemeid\": \"dnet:provenanceActions\", \"schemename\": \"dnet:provenanceActions\"}, \"inferenceprovenance\": \"dedup-similarity-organization-simple\", \"inferred\": true, \"deletedbyinference\": true}, \"alternativeNames\": [], \"echighereducation\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}, \"id\": \"20|grid________::7746c66da537090d6f5bc3997471e6f8\", \"eclegalperson\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}, \"lastupdatetimestamp\": 1566902409376, \"ecinternationalorganizationeurinterests\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}, \"ecnonprofit\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}, \"ecenterprise\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}, \"ecinternationalorganization\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}, \"legalshortname\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"Universitas Hindu Indonesia\"}, \"country\": {\"classid\": \"ID\", \"classname\": \"Indonesia\", \"schemeid\": \"dnet:countries\", \"schemename\": \"dnet:countries\"}, \"extraInfo\": [], \"originalId\": [], \"ecsmevalidated\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}}"; - String JSONEntity2 = "{\"eclegalbody\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"false\"}, \"ecresearchorganization\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"false\"}, \"logourl\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}, \"pid\": [], \"websiteurl\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"http://www.ui.ac.id/\"}, \"ecnutscode\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"false\"}, \"legalname\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"Universitas Indonesia\"}, \"collectedfrom\": [{\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"key\": \"10|openaire____::47ce9e9f4fad46e732cff06419ecaabb\", \"value\": \"OpenDOAR\"}], \"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"sysimport:crosswalk:entityregistry\", \"classname\": \"sysimport:crosswalk:entityregistry\", \"schemeid\": \"dnet:provenance_actions\", \"schemename\": \"dnet:provenance_actions\"}, \"inferenceprovenance\": \"dedup-similarity-organization-simple\", \"inferred\": true, \"deletedbyinference\": true}, \"alternativeNames\": [], \"echighereducation\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"false\"}, \"id\": \"20|opendoar____::8dcf6331a28c2aa6d41f58b06ce3c385\", \"eclegalperson\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"false\"}, \"lastupdatetimestamp\": 0, \"ecinternationalorganizationeurinterests\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"false\"}, \"ecnonprofit\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"false\"}, \"ecenterprise\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"false\"}, \"ecinternationalorganization\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"false\"}, \"legalshortname\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"\"}, \"country\": {\"classid\": \"ID\", \"classname\": \"Indonesia\", \"schemeid\": \"dnet:countries\", \"schemename\": \"dnet:countries\"}, \"extraInfo\": [], \"originalId\": [\"opendoar____::Universitas_Indonesia\"], \"ecsmevalidated\": {\"dataInfo\": {\"invisible\": false, \"provenanceaction\": {\"classid\": \"\", \"classname\": \"\", \"schemeid\": \"\", \"schemename\": \"\"}, \"inferenceprovenance\": \"\", \"inferred\": false, \"deletedbyinference\": false}, \"value\": \"false\"}}"; - - MapDocument mapDoc1 = MapDocumentUtil.asMapDocumentWithJPath(config, JSONEntity1); - MapDocument mapDoc2 = MapDocumentUtil.asMapDocumentWithJPath(config, JSONEntity2); - - TreeStats treeStats = treeProcessor.evaluateTree(mapDoc1, mapDoc2); - - System.out.println(treeStats); - - } } \ No newline at end of file diff --git a/dnet-dedup-test/src/test/java/eu/dnetlib/pace/DedupTestUtils.java b/dnet-dedup-test/src/test/java/eu/dnetlib/pace/DedupTestUtils.java index 08d0028..6bcd3bd 100644 --- a/dnet-dedup-test/src/test/java/eu/dnetlib/pace/DedupTestUtils.java +++ b/dnet-dedup-test/src/test/java/eu/dnetlib/pace/DedupTestUtils.java @@ -9,29 +9,29 @@ import java.util.List; public abstract class DedupTestUtils { - public static void printStatistics(JavaRDD ccs){ - final JavaRDD connectedComponents = ccs.filter(cc -> cc.getDocs().size()>1); - final JavaRDD nonDeduplicated = ccs.filter(cc -> cc.getDocs().size()==1); - - //print deduped - connectedComponents.map(cc -> { - StringBuilder sb = new StringBuilder(); - for (MapDocument m : cc.getDocs()){ - sb.append(m.getFieldMap().get("originalId").stringValue() + " - "+ m.getFieldMap().get("legalname").stringValue() + "\n"); - } - return sb.toString(); - }).foreach(s -> System.out.println("*******\n" + s + "*******\n")); - - //print nondeduped - nonDeduplicated.foreach(cc -> { - System.out.println(cc.getId() + " - " + cc.getFieldMap().get("legalname").stringValue()); - }); - - System.out.println("Non duplicates: " + nonDeduplicated.count()); - System.out.println("Duplicates: " + connectedComponents.flatMap(cc -> cc.getDocs().iterator()).count()); - System.out.println("Connected Components: " + connectedComponents.count()); - - } +// public static void printStatistics(JavaRDD ccs){ +// final JavaRDD connectedComponents = ccs.filter(cc -> cc.getDocs().size()>1); +// final JavaRDD nonDeduplicated = ccs.filter(cc -> cc.getDocs().size()==1); +// +// //print deduped +// connectedComponents.map(cc -> { +// StringBuilder sb = new StringBuilder(); +// for (MapDocument m : cc.getDocs()){ +// sb.append(m.getFieldMap().get("originalId").stringValue() + " - "+ m.getFieldMap().get("legalname").stringValue() + "\n"); +// } +// return sb.toString(); +// }).foreach(s -> System.out.println("*******\n" + s + "*******\n")); +// +// //print nondeduped +// nonDeduplicated.foreach(cc -> { +// System.out.println(cc.getId() + " - " + cc.getFieldMap().get("legalname").stringValue()); +// }); +// +// System.out.println("Non duplicates: " + nonDeduplicated.count()); +// System.out.println("Duplicates: " + connectedComponents.flatMap(cc -> cc.getDocs().iterator()).count()); +// System.out.println("Connected Components: " + connectedComponents.count()); +// +// } public static String getOrganizationLegalname(MapDocument mapDocument){ return mapDocument.getFieldMap().get("legalname").stringValue(); diff --git a/dnet-dedup-test/src/test/resources/eu/dnetlib/pace/examples/organization/organization.gz b/dnet-dedup-test/src/test/resources/eu/dnetlib/pace/examples/organization/organization.gz new file mode 100644 index 0000000000000000000000000000000000000000..a1b42608d52a55deeb465b4ce2656e9e7aff7ba8 GIT binary patch literal 96541 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

S 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