我想在创建Spark框架时提供数字。我在提供十进制类型的数字时遇到问题。
这样,数字就被截断了:
df = spark.createDataFrame([(10234567891023456789.5, )], ["numb"])
df = df.withColumn("numb_dec", F.col("numb").cast("decimal(30,1)"))
df.show(truncate=False)
#+---------------------+----------------------+
#|numb |numb_dec |
#+---------------------+----------------------+
#|1.0234567891023456E19|10234567891023456000.0|
#+---------------------+----------------------+
字符串
这失败了:
df = spark.createDataFrame([(10234567891023456789.5, )], "numb decimal(30,1)")
df.show(truncate=False)
型
TypeError:field number:DecimalType(30,1)cannot accept object 1.0234567891023456e+19 in type <class 'float'>
如何正确地提供大的十进制数,使他们不会被截断?
2条答案
按热度按时间6vl6ewon1#
这可能与Python和Spark之间浮点表示的一些差异有关。你可以尝试在创建嵌套框架时传递字符串值:
字符串
kb5ga3dv2#
试试下面的东西-
字符串