Spark sql объединяет записи выборки, не совпадающие с именем команды - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть таблица с именем team с одним столбцом с именем team_name

CHN
MUM
HYD
BNG

Я хочу получить приведенный ниже результат.

scala> val df = hc.sql("""select a.team_name,b.team_name from
 | (select team_name,'dummy' as join_key  from landing.teams)a
 | inner join
 | (select team_name,'dummy' as join_key  from landing.teams)b
 | on(a.join_key = b.join_key)
 | where a.team_name != b.team_name
 |  """)
df: org.apache.spark.sql.DataFrame = [team_name: string, team_name: string]

scala> df.show(100,false)
+---------+---------+
|team_name|team_name|
+---------+---------+
|MUM      |CHN      |
|MUM      |BNG      |
|MUM      |HYD      |
|CHN      |BNG      |
|CHN      |HYD      |
|CHN      |MUM      |
|BNG      |CHN      |
|BNG      |HYD      |
|BNG      |MUM      |
|HYD      |CHN      |
|HYD      |BNG      |
|HYD      |MUM      |
+---------+---------+

Я могу достичь этого решения. но возможно ли получить тот же результат, не используя тот столбец, который я использовал мой запрос выше. Пожалуйста, помогите

1 Ответ

0 голосов
/ 14 апреля 2020

Вам просто нужно выполнить перекрестное объединение данных.

Создание информационного кадра:

>>> 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.

...