В фрейме данных Scala объедините эквивалентные строки после парного сравнения - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть фрейм данных в scala, который является результатом попарного сравнения всех строк в исходных данных с самим собой вместе со счетом.Я ищу эффективный способ объединения двух строк, которые получаются в каждой паре (например, Value1, Value2 и Value2, Value1).

Если это уместно, этот фрейм данных создается из команды spark.read.table, ссылающейся на таблицу, которая содержит все эти строки.Моей первой мыслью был цикл, который в основном строил новый фрейм данных и проверял каждую строку, чтобы увидеть, сохранили ли мы эту пару в новой, но я надеялся, что есть более эффективный способ, который позволит сделать это гораздо более эффективно..

Оптимально, я бы посмотрел на подмножество значений в пределах диапазона оценок и объединил несколько строк в «первую» (где «первая» может быть только в алфавитном порядке).

Данные

Item1     Item2     1.5
Item2     Item1     1.5
Item3     Item4     2.6
Item4     Item3     2.6
Item3     Item5     2.7
Item5     Item3     2.7

Результат

Item1     Item2     1.5
Item3     Item4     2.6
Item3     Item5     2.7

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Итак, исходя из идеи Vamsi, вот версия для Scala (поскольку речь шла о scala, а не pyspark).

val df = spark.read.table("table_name")
  .withColumn("NewNameA", least('nameA, 'nameB))
  .withColumn("NewNameB", greatest('nameA,'nameB))
  .dropDuplicates("NewNameA","NewNameB")
0 голосов
/ 15 декабря 2018

Это можно сделать с помощью встроенных функций least и greatest.Пример с PySpark показан здесь.

from pyspark.sql import functions as f
df.select(f.least(df.col1,df.col2).alias('i1'),
          f.greatest(df.col1,df.col2).alias('i2'),
          df.price
         ).distinct()

greatest возвращает наибольшее значение среди выбранных столбцов, в то время как least выбирает наименьшее значение среди них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...