Как обновить столбец данных в Spark Scala после объединения? - PullRequest
0 голосов
/ 05 сентября 2018

Объединение двух данных приводит к почти 60 столбцам. Большинство из них предполагают, что они останутся как есть, но некоторые требуют обновления на основе значений в других столбцах. Есть ли способ обновить эти столбцы без вычисления новых, удаления оригиналов и переименования вычисленных обратно?

Упрощенный пример: доход в столбце $"Sales на левом фрейме данных должен быть взвешен на $"Weight в результатах объединения. Есть ли эффективный способ сделать расчет без генерации $"SalesWeighted как нового столбца, отбрасывая исходный $Sales и переименовывая $SalesWeighted в $Sales?

val l = Seq((1, 50), (2, 35), (3, 66))
            .toDF("Id", "Sales")

val r = Seq((1, "Premium", 0.2), (1, "Standard", 0.8), 
            (2, "Premium", 0.4), (2, "Standard", 0.6), 
            (3, "Premium", 0.333), (3, "Standard", 0.333), (3, "Garbage", 0.334))
            .toDF("Id", "Grade", "Weight")

display(l.join(r, Seq("Id")).withColumn("SalesWeighted", $"Sales"*$"Weight")
            .orderBy($"Id", $"Grade"))

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Вы можете просто назвать новый столбец так же, как столбец, который нужно заменить:

l.join(r, Seq("Id")).withColumn("Sales", $"Sales" * $"Weight").
  orderBy($"Id", $"Grade")

Или просто используйте select:

l.join(r, Seq("Id")).
  select($"Id", $"Grade", $"Weight", ($"Sales" * $"Weight").as("Sales")).
  orderBy($"Id", $"Grade")
0 голосов
/ 05 сентября 2018

Используйте Drop , чтобы удалить ненужные столбцы

val l = Seq((1, 50), (2, 35), (3, 66))
                .toDF("Id", "Sales")

    val r = Seq((1, "Premium", 0.2), (1, "Standard", 0.8), 
                (2, "Premium", 0.4), (2, "Standard", 0.6), 
                (3, "Premium", 0.333), (3, "Standard", 0.333), (3, "Garbage", 0.334))
                .toDF("Id", "Grade", "Weight")

    display(l.join(r, Seq("Id")).withColumn("SalesWeighted", $"Sales"*$"Weight").drop($"Sales")
                .orderBy($"Id", $"Grade"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...