Как получить пары по столбцу в искровом фрейме, например, в питоне? - PullRequest
1 голос
/ 23 сентября 2019

Привет ~ Я новичок в искре.Я хочу получить пары со столбцом в кадре данных, каждый элемент в столбце ("all_mv_id") заставляет других составлять пары следующим образом:

До:

+---------+
|all_mv_id|
+---------+
|      131|
|      121|
|     2223|
|   123412|
|     3982|
+---------+

после:

+------+------+
|  id_1|  id_2|
+------+------+
|   131|   121|
|   131|  2223|
|   131|123412|
|   131|  3982|
|   131| 54281|
|   121|  2223|
|   121|123412|
|   121|  3982|
|   121| 54281|
|  2223|123412|
|  2223|  3982|
|  2223| 54281|
|123412|  3982|
|123412| 54281|
|  3982| 54281|
+------+------+

Я имею в виду, в python pandas я сделаю так:

# generate data
ids = [('all_mv_id', ['131', '121', '2223', '123412', '3982', '54281'])]
df = pd.DataFrame.from_items(ids)

all_mv_id = list(df.all_mv_id)
temp_container = []
for i in range(len(all_mv_id)):
    for j in range(i+1,len(all_mv_id)):
        temp_container.append([all_mv_id[i],all_mv_id[j]])

df_1 = pd.DataFrame(temp_container)
df_1.columns = ["id_1", "id_2"]

Но как перевести этот питон в пандах в scala в искровом фрейме?Я попробовал ListBuffer, но, похоже, в него нельзя добавлять кортежи.

1 Ответ

0 голосов
/ 23 сентября 2019

Полагаю, что обычное само присоединение с условием left.id < right.id должно выполнить работу:

val df = List("131", "121", "2223", "123412", "3982").toDF("id")

df.as("left")
    .join(df.as("right"), $"left.id" < $"right.id")
    .select($"left.id" as "id_1", $"right.id" as "id_2")
    .show

Результат:

+------+------+
|  id_1|  id_2|
+------+------+
|   131|  2223|
|   131|  3982|
|   131| 54281|
|   121|   131|
|   121|  2223|
|   121|123412|
|   121|  3982|
|   121| 54281|
|  2223|  3982|
|  2223| 54281|
|123412|   131|
|123412|  2223|
|123412|  3982|
|123412| 54281|
|  3982| 54281|
+------+------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...