Искра для python — Null при приведении его из строки в десятичные дроби (36,12)

#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»);