#python #apache-spark
#python #apache-spark
Вопрос:
Невозможно преобразовать строку в десятичную, и она возвращает null.
from pyspark.sql.types import DecimalType
df=spark.read("default.data_table")
df2=df.column("invoice_amount",df["invoice_amount"].cast('decimal(36,12)'))
//display(df)
display(df2)
invoice_amount как «15860461.48» (строка) в таблице data_table
Если я печатаю df — он показывает сумму счета как «15860461,48», но когда я печатаю df2, он показывает null
Комментарии:
1. Строка не является числом, вам нужно проанализировать ее, чтобы получить числовое значение
Ответ №1:
Какую версию вы использовали? В моем случае он хорошо работает там, где я использовал spark 3.0.1.
from pyspark.sql.functions import *
from pyspark.sql.types import *
data = ['15860461.48']
df = spark.createDataFrame(data, StringType())
df.show(truncate=False)
df2 = df.withColumn('value', col('value').cast('decimal(36, 12)'))
df2.show(truncate=False)
-----------
|value |
-----------
|15860461.48|
-----------
---------------------
|value |
---------------------
|15860461.480000000000|
---------------------
Комментарии:
1. Спасибо Lamanus. Моя версия — Apache Spark 2.4.3. Это правильно, она работает, если я создаю фрейм данных вручную, но если я читаю его из таблицы, это не так.
2. Можете ли вы опубликовать какую-либо схему таблицы DDL или db? Какой тип базы данных? это действительно работает
spark.read("table")
? без jdbc?3. создайте таблицу data_table(комментарий к строке invoice_amount, строка material_id) с помощью paraquet. Мы создаем эту таблицу из фрейма данных. f_sales.write.mode(«добавить»).saveAsTable(«data_table»);