python的Spark-从字符串转换为小数时为空(36,12)

python的Spark-从字符串转换为小数时为空(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(df

无法将字符串转换为十进制,它返回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)

发票金额在表数据中为“15860461.48”(字符串)


如果我打印df-它将发票金额显示为“15860461.48”,但当我打印df2时,它将显示null

您使用的是什么版本?就我而言,它在我使用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|
+---------------------+

字符串不是数字,需要对其进行解析才能得到数值。我的版本是ApacheSpark2.4.3。这是正确的,如果我手动创建数据帧,它可以工作,但是如果我从表中读取它,它不会工作。您可以发布任何DDL或db表模式吗?什么类型的数据库?这真的适用于spark.read(“表格”)?没有jdbc?使用paraquet创建表格数据表格(发票金额字符串注释,物料id字符串)。我们正在从dataframe创建此表。f_sales.write.mode(“append”).saveAsTable(“数据表”);