Azure Блоки данных Python добавить производный столбец на основе содержимого существующего столбца - PullRequest
0 голосов
/ 17 марта 2020

У меня есть датафрейм, загруженный в spark, который приходит из CSV-файла. Однако я хочу добавить два столбца к фрейму данных, и содержимое этих столбцов зависит от константы одного столбца, который уже есть.

Столбец, который у меня уже есть, называется YearWeek и может содержать wkxxxx_yy или xxxx_yy, где xxxx - год.

Мне нужно добавить столбец с именем Period и столбец с именем Year. Новый период столбца может содержать только значения «Weekly» или «Monthly». Если столбец YearWeek начинается с «wk», то столбец Period должен иметь значение «Еженедельно», в противном случае «Ежемесячно»

Я выполнил поиск по курсу и нашел следующий фрагмент кода:

> df4 = df3.withcolumn(NewColumn5, when          
>     df3.col("YearWeek").startswith("wk"),yearweek[3:6].otherwise(YearWeek[1:4]))\
>     .withcolumn(NewColumn1, when df3.col("YearWeek").startswith("wk"),"Weekly".otherwise("Monthly"))

Однако это приводит к синтаксической ошибке

SyntaxError: invalid syntax
File "<command-2818966973632811>", line 61
df4 = df3.withcolumn(NewColumn5, when 
df3.col("YearWeek").startswith("wk"),yearweek[3:6].otherwise(YearWeek[1:4]))\
                                    ^
SyntaxError: invalid syntax

Что я делаю не так?

1 Ответ

0 голосов
/ 18 марта 2020

Тем временем я решил это по-другому. Я просто читаю csv-файлы и собираю их в один большой массив данных. После этого я создаю таблицу из фрейма данных

df4.createOrReplaceTempView(tablename)

. Я использую spark SQL, чтобы добавить производные столбцы на основе содержимого столбца YearWeek. На самом деле очень легко для меня, потому что я SQL -гай

df5 = spark.sql("select Somecolumn1,\
                    Somecolumn2,\
                     Somecolumn3,\
                     Somecolumn4,\
                     YearWeek,\
                     Somecolumn5,\
                     Somecolumn6,\
                     Somecolumn7,\
                     Somecolumn8,\
                     Somecolumn9,\
                     Somecolumn10,\
                     Somecolumn11,\
                     Somecolumn12,\
                     CASE WHEN LEFT(YearWeek,2) = 'WK' THEN 'Weekly' ELSE 'Monthly' END AS Period,\
                     CASE WHEN LEFT(YearWeek,2) = 'WK' THEN substring(YearWeek, 3,4) ELSE substring(YearWeek,1,4) END AS Year from " + tablename)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...