Преобразование всех столбцов в искровом df из десятичных чисел в числа с плавающей запятой для преобразования пандPython

Программы на Python
Ответить
Anonymous
 Преобразование всех столбцов в искровом df из десятичных чисел в числа с плавающей запятой для преобразования панд

Сообщение Anonymous »

Я хочу создать функцию для преобразования типа данных всех столбцов Spark DataFrame из десятичного в плавающий.

Я не знаю заранее имена своих столбцов, а также, если и сколько столбцов этого типа десятичных дробей включены. Это исключает явное приведение столбцов во избежание ограничений масштабирования.

Столбцы других типов данных не должны быть затронуты.

Могут возникнуть значения NULL.

Причина всего этого безумия: мне нужно преобразовать фрейм данных Spark в pandas, чтобы потом иметь возможность писать файл xlsx. Однако преобразование десятичных чисел в панды приводит к получению типа объекта, который сохраняется в файле xlsx как текст, а не как число.


Пример кода:

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

df = spark.sql("select 'text' as txt, 1.1111 as one, 2.22222 as two, CAST(3.333333333333 AS FLOAT) as three")
df.printSchema()

>>
root
|-- txt: string (nullable = false)
|-- one: decimal(5,4) (nullable = false)
|-- two: decimal(6,5) (nullable = false)
|-- three: float (nullable = false)
Превратиться в панду:

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

df_pd = df.toPandas()
print(df_pd.dtypes)

>>
txt       object
one       object
two       object
three    float32
dtype: object
Мне нужно, чтобы все десятичные типы были типа float в df_pd.

В идеале у меня есть что-то вроде этого:< /p>

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

df = spark.sql("select 'text' as txt, 1.1111 as one, 2.22222 as two, 3.333333333333 as three")

insert magic

df.printSchema()

>>
root
|-- txt: string (nullable = false)
|-- one: float (nullable = false)
|-- two: float (nullable = false)
|-- three: float (nullable = false)
Спасибо

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

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

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

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

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

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