Pyspark从友谊列表中找到友谊对

时间:2017-07-23 01:16:00

标签: apache-spark pyspark apache-spark-sql spark-dataframe

我目前有描述单向友谊的数据,如下所示:
对于第一行,它意味着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] 

谢谢!

1 个答案:

答案 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|
+---+---+