如何在创建pyspark数据框时将小数作为值传递?

问题描述 投票:0回答:1

我想创建一个虚拟数据帧,其中一行包含十进制值。但是这样做时,它将自动将其转换为双精度型。我希望数据类型为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中将双精度类型转换为十进制类型。我对此并不陌生,所以如果有人可以帮助,那就太好了!

pyspark pyspark-sql pyspark-dataframes
1个回答
0
投票

您可以使用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)
© www.soinside.com 2019 - 2024. All rights reserved.