python的Spark-从字符串转换为小数时为空(36,12)
无法将字符串转换为十进制,它返回nullpython的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
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(“数据表”);