Skip to content

Commit 5a86fa4

Browse files
committed
FactorGen: Merge Forum-related tables to personNumFriendOfFriendForums
1 parent 0705b1d commit 5a86fa4

File tree

1 file changed

+29
-24
lines changed

1 file changed

+29
-24
lines changed

src/main/scala/ldbc/snb/datagen/factors/FactorGenerationStage.scala

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -576,32 +576,37 @@ object FactorGenerationStage extends DatagenStage with Logging {
576576
numFriendTags
577577
},
578578
// forums
579-
"personNumForums" -> Factor(ForumHasMemberType) { case Seq(hasMember) =>
580-
frequency(hasMember, value = $"ForumId", by = Seq($"PersonId"))
581-
},
582-
"personNumFriendForums" -> Factor(ForumHasMemberType, PersonKnowsPersonType) { case Seq(hasMember, personKnowsPerson) =>
583-
val personNumForums = frequency(hasMember, value = $"ForumId", by = Seq($"PersonId"), agg = count)
584-
.select($"PersonId".as("Person1Id"), $"frequency")
585-
586-
val friendForums = personNumForums.as("personNumForums")
587-
.join(undirectedKnows(personKnowsPerson).as("knows"), $"personNumForums.Person1Id" === $"knows.Person2Id", "leftouter")
588-
589-
val numFriendForums = frequency(friendForums, value = $"frequency", by = Seq($"knows.Person1Id"), agg = sum)
590-
numFriendForums
591-
},
592-
"personNumFriendOfFriendForums" -> Factor(ForumHasMemberType, PersonKnowsPersonType) { case Seq(hasMember, personKnowsPerson) =>
593-
val personNumForums = frequency(hasMember, value = $"ForumId", by = Seq($"PersonId"), agg = count)
594-
.select($"PersonId".as("Person1Id"), $"frequency")
595-
596-
val friendForums = personNumForums.as("personNumForums")
597-
.join(undirectedKnows(personKnowsPerson).as("knows"), $"personNumForums.Person1Id" === $"knows.Person2Id", "leftouter")
598-
599-
val numFriendForums = frequency(friendForums, value = $"frequency", by = Seq($"knows.Person1Id"), agg = sum)
579+
"personNumFriendOfFriendForums" -> Factor(PersonType, ForumHasMemberType, PersonKnowsPersonType) { case Seq(person, hasMember, personKnowsPerson) =>
580+
// direct forums
581+
val directForums = person.as("Person")
582+
.join(hasMember.as("hasMember"), $"hasMember.PersonId" === $"Person.id", "leftouter")
583+
584+
val numForums = frequency(directForums, value = $"ForumId", by = Seq($"Person.id"), agg = count)
585+
.select($"Person.id".as("Person1Id"), $"frequency".as("numDirectForums"))
586+
587+
val friendForums = numForums.as("numForums1")
588+
.join(undirectedKnows(personKnowsPerson).as("knows"), $"numForums1.Person1Id" === $"knows.Person1Id", "leftouter")
589+
.join(numForums.as("numForums2"), $"numForums2.Person1Id" === $"knows.Person2Id", "leftouter")
590+
591+
// forums of friends
592+
val numFriendForums = frequency(
593+
friendForums,
594+
value = $"numForums2.numDirectForums",
595+
by = Seq($"numForums1.Person1Id", $"numForums1.numDirectForums"),
596+
agg = sum
597+
).select($"numForums1.Person1Id".as("Person1Id"), $"numForums1.numDirectForums", $"frequency".as("numFriendForums"))
600598

601-
val friendOfFriendForums = numFriendForums.as("numFriendForums")
602-
.join(undirectedKnows(personKnowsPerson).as("knows"), $"numFriendForums.Person1Id" === $"knows.Person2Id", "leftouter")
599+
// forums of friends of friends
600+
val friendOfFriendForums = numFriendForums.as("numFriendForums1")
601+
.join(undirectedKnows(personKnowsPerson).as("knows"), $"numFriendForums1.Person1Id" === $"knows.Person1Id", "leftouter")
602+
.join(numFriendForums.as("numFriendForums2"), $"numFriendForums2.Person1Id" === $"knows.Person2Id", "leftouter")
603603

604-
val numFriendOfFriendForums = frequency(friendOfFriendForums, value = $"frequency", by = Seq($"knows.Person1Id"), agg = sum)
604+
val numFriendOfFriendForums = frequency(
605+
friendOfFriendForums,
606+
value = $"numFriendForums2.numFriendForums",
607+
by = Seq($"numFriendForums1.Person1Id", $"numFriendForums1.numDirectForums", $"numFriendForums1.numFriendForums"),
608+
agg = sum
609+
)
605610
numFriendOfFriendForums
606611
},
607612
// companies

0 commit comments

Comments
 (0)