PySpark: новый столбец с именем в верхнем регистре неожиданно удаляетсяPython

Программы на Python
Ответить
Anonymous
 PySpark: новый столбец с именем в верхнем регистре неожиданно удаляется

Сообщение Anonymous »

Я пытаюсь добавить новый столбец CHANNEL_ID в свой PySpark DataFrame на основе условной логики, используя pyspark.sql.functions.when и после этого удаляя старый столбец Channel_id, который больше не нужен. Однако новый столбец не отображается в результирующем DataFrame, когда я использую имя CHANNEL_ID в верхнем регистре. Кажется, вместо этого удаляется новый столбец CHANNEL_ID.
Вот мой код:

Код: Выделить всё

import pyspark.sql.functions as f
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

df = spark.createDataFrame(
[
(1, 101),
(2, 102),
(3, 103)
], schema="id int, channel_id int"
)

df.show()
Это показывает ожидаемый фрейм данных:

Код: Выделить всё

+---+----------+
| id|channel_id|
+---+----------+
|  1|       101|
|  2|       102|
|  3|       103|
+---+----------+
Затем я пытаюсь добавить новый столбец CHANNEL_ID и удалить исходный столбец Channel_id:

Код: Выделить всё

df.withColumns(
{
"CHANNEL_ID": f.when(f.col("channel_id") == 101, "First channel")
.when(f.col("channel_id") == 102, "Second channel")
.otherwise("-")
}
).drop("channel_id").show()
Я ожидал, что в выводе будут показаны столбец id и вновь созданный столбец CHANNEL_ID, но вместо этого получился следующий результат:

Код: Выделить всё

+---+
| id|
+---+
|  1|
|  2|
|  3|
+---+
Вопрос:
Почему столбец CHANNEL_ID удаляется, хотя я пытаюсь удалить Channel_id? Похоже, что имя CHANNEL_ID в верхнем регистре каким-то образом мешает методу drop. Если я переименую столбец во что-то другое (например, Channel_alias), он будет работать нормально.
Связано ли такое поведение с чувствительностью к регистру или конфликтами имен в PySpark? Будем признательны за любые разъяснения или предложения по решению этой проблемы!

Подробнее здесь: https://stackoverflow.com/questions/790 ... expectedly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»