@@ -576,32 +576,37 @@ object FactorGenerationStage extends DatagenStage with Logging {
576
576
numFriendTags
577
577
},
578
578
// 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" ))
600
598
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" )
603
603
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
+ )
605
610
numFriendOfFriendForums
606
611
},
607
612
// companies
0 commit comments