Я не знаю заранее имена своих столбцов, а также, если и сколько столбцов этого типа десятичных дробей включены. Это исключает явное приведение столбцов во избежание ограничений масштабирования.
Столбцы других типов данных не должны быть затронуты.
Могут возникнуть значения 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
В идеале у меня есть что-то вроде этого:< /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
Мобильная версия