我目前有描述单向友谊的数据,如下所示:
对于第一行,它意味着1添加3,4,8作为朋友,但不知道他们的回答,如果3添加1作为朋友,他们成为一对。
int sum(const int (&a)[SIZE][SIZE])
{
return std::accumulate(&a[0][0], &a[0][0] + SIZE * SIZE, 0);
}
如何使用PySpark和PySpark SQL生成友谊对,这两者都是双向朋友?样本输出(不同或不重要):
ID friendsList
1 [3, 4, 8]
2 [8]
3 [1]
4 [1]
5 [6]
6 [7]
7 [1]
8 [1, 2, 4]
谢谢!
答案 0 :(得分:0)
这可以通过<body>
函数和自联接来实现,如下所示。
explode
如果Dataframe API优于spark SQL,请使用以下内容。
from pyspark.sql.functions import explode
df = spark.createDataFrame(((1,[3, 4, 8]),(2,[8]),(3,[1]),(4,[1]),(5,[6]),(6,[7]),(7,[1]),(8,[1, 2, 4])),["c1",'c2'])
df.withColumn('c2',explode(df['c2'])).createOrReplaceTempView('table1')
>>> spark.sql("SELECT t0.c1,t0.c2 FROM table1 t0 INNER JOIN table1 t1 ON t0.c1 = t1.c2 AND t0.c2 = t1.c1").show()
+---+---+
| c1| c2|
+---+---+
| 1| 3|
| 8| 1|
| 1| 4|
| 2| 8|
| 4| 1|
| 8| 2|
| 3| 1|
| 1| 8|
+---+---+