Вам просто нужно выполнить перекрестное объединение данных.
Создание информационного кадра:
>>> from pyspark.sql.types import (
... StringType,
... StructField,
... StructType
... )
>>>
>>> city_list = [["CHN"], ["MUM"], ["HYD"], ["BNG"]]
>>> city_schema = StructType([
... StructField('city_name', StringType(), True)
... ])
>>>
>>> df = spark.createDataFrame(city_list, schema=city_schema)
перекрестное объединение:
>>> df2 = df.crossJoin(df.withColumnRenamed('city_name', 'city_name1'))
>>> df2.filter(df2['city_name'] != df2['city_name1']).show()
+---------+----------+
|city_name|city_name1|
+---------+----------+
| CHN| MUM|
| CHN| HYD|
| CHN| BNG|
| MUM| CHN|
| MUM| HYD|
| MUM| BNG|
| HYD| CHN|
| HYD| MUM|
| HYD| BNG|
| BNG| CHN|
| BNG| MUM|
| BNG| HYD|
+---------+----------+
Это пример pyspark, но синтаксис такой же для scala.