我想创建一个虚拟数据帧,其中一行包含十进制值。但是这样做时,它将自动将其转换为双精度型。我希望数据类型为Decimal(18,2)或其他。
dummy_row = spark.createDataFrame([(0,-1,'missing','missing',0.0],df.columns)
我希望架构为
unique_id:integer
line_id:long
line_name:string
line_type:string
pct:decimal(18,5)
但是我知道
unique_id:integer
line_id:long
line_name:string
line_type:string
pct:double
如何在pyspark中将双精度类型转换为十进制类型。我对此并不陌生,所以如果有人可以帮助,那就太好了!
您可以使用StructType和StructField在读取时间/数据帧创建时指定Schema
from pyspark.sql.types import *
from decimal import Decimal
dfschema = StructType([StructField("unique_id", IntegerType()),
StructField("line_id", LongType()),
StructField("line_name", StringType()),
StructField("line_type", StringType()),
StructField("pct", DecimalType(18,5))])
data=[(1,-1,'missing','missing',Decimal(0.0))]
dummy_row = spark.createDataFrame(data, schema=dfschema)
dummy_row.printSchema()
Output:
root
|-- unique_id: integer (nullable = true)
|-- line_id: long (nullable = true)
|-- line_name: string (nullable = true)
|-- line_type: string (nullable = true)
|-- pct: decimal(18,5) (nullable = true)