Nano Hash - криптовалюты, майнинг, программирование

Сводный фрейм данных с несколькими столбцами - Spark / Scala

У меня есть фрейм данных, как показано ниже

+----------+----+----+----+
|      date|col1|col2|col3|
+----------+----+----+----+
|2021-05-01|  20|  30|  40|
|2021-05-02| 200| 300|  10|
+----------+----+----+----+

Я хочу повернуть / транспонировать этот фрейм данных как

+-----+----------+----------+
|col  |2021-05-01|2021-05-02|
+-----+----------+----------+
|Col1 |        20|       200|
|Col1 |        30|       300|
|Col1 |        40|        10|
+-----+----------+----------+

Другие статьи о stackoverflow, такие как this и это помогло мне в некоторой степени, но я смог найти решение .

Мои подходы были (все неудачные попытки)

scala> dUnion.groupBy("date").pivot("date").agg(first("col1")).show()
+----------+----------+----------+
|      date|2021-05-01|2021-05-02|
+----------+----------+----------+
|2021-05-02|      null|       200|
|2021-05-01|        20|      null|
+----------+----------+----------+

scala> dUnion.groupBy("date", "col1", "col2", "col3").pivot("date").agg(first("col1")).show()
+----------+----+----+----+----------+----------+
|      date|col1|col2|col3|2021-05-01|2021-05-02|
+----------+----+----+----+----------+----------+
|2021-05-02| 200| 300|  10|      null|       200|
|2021-05-01|  20|  30|  40|        20|      null|
+----------+----+----+----+----------+----------+

Но шкаф, который я мог придумать, был

scala> dUnion.groupBy().pivot("date").agg(first("col1")).show()
+----------+----------+
|2021-05-01|2021-05-02|
+----------+----------+
|        20|       200|
+----------+----------+
15.06.2021

  • Вы пытаетесь отменить поворот. См. Мой ответ здесь: stackoverflow.com/a/60212279/180650 15.06.2021
  • Спасибо @Vitaliy. stack было ключевым словом, которое я искал. 16.06.2021

Ответы:


1

Это возможно, но я думаю, что это немного медленно.

val schema = df.schema
val longForm = df.flatMap(row => {
    val col = row.getString(0)
    (1 until row.size).map(i => {
        (col, schema(i).name, row.getString(i))
    })
})

longForm.groupBy('_2).pivot('_1).agg(first('_3))
.withColumnRenamed("_2", "col").show(10, false)


+----+----------+----------+
|col |2021-05-01|2021-05-02|
+----+----------+----------+
|col3|40        |10        |
|col1|20        |200       |
|col2|30        |300       |
+----+----------+----------+
15.06.2021
  • Спасибо @Lamanus. Это решение сработало для меня. stack - это другой взгляд на эту проблему, и у меня он сработал. 16.06.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..