Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как добавить столбец с вложенными элементами в фрейм данных из других столбцов (withColumn)

Автор вопроса: conОтветов: 1

У меня есть фреймворк PySpark, который выглядит как

C C1 C2 C3
1 2  3  4

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

C C1 C2 C3  V
1 2  3  4   {"C:1", "C1:2", "C2:3", "C3:4"}

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

Я пробовал df2 = df.withColumn("V", struct("V.*", col("C1").as('C1'))), но это дает загадочную синтаксическую ошибку.

Изменить: я бы не сказал, что этот вопрос является дубликатом строки преобразования pyspark в json с нулями, потому что решение, которое было опубликовано здесь пользователем и которое решило мою проблему, не публикуется там.

Как я могу сделать этот вложенный столбец V из остальных столбцов в той же строке?

  • as - ключевое слово в Python. Используйте alias - col("C1").alias('C1') 10465355 30.11.2018
  • это то, что вы ищете? pault 30.11.2018
  • @pault это не дубликат, потому что решение на этой странице не то, что я хочу, Пользователь sailesh решил мою проблему. Его решение не отображается на этой странице. Кроме того, я удаляю строки с нулевыми значениями. Нулевые значения здесь не важны. con 30.11.2018

apache-sparkpysparkpyspark-sql

Ответы

Ответ 1 · рейтинг 1 · Sailesh Kotha

В PySpark вы можете добиться, используя struct. Псевдоним не нужен.

df.withColumn("V", struct(col("C"), col("C1"), col("C2"), col("C3"))

Если вы не хотите жестко кодировать имена столбцов, вы также можете сделать

df.withColumn("V", struct(col("*"))

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы