首页 > 解决方案 > Inferschema 检测列作为字符串而不是来自 pyspark 中镶木地板的双精度

问题描述

问题 - 我正在使用 azure databricks 在 pyspark 中读取镶木地板文件。有些列有很多空值并且有十进制值,这些列被读取为字符串而不是双精度。

有什么方法可以推断 pyspark 中的正确数据类型?

代码 -

要读取镶木地板文件 -

df_raw_data = sqlContext.read.parquet(data_filename[5:])

其输出是一个包含 100 多列的数据帧,其中大多数列的类型为 double,但 printSchema() 将其显示为字符串。

PS - 我有一个镶木地板文件,它可以有动态列,因此为数据框定义结构对我不起作用。我曾经将 spark 数据框转换为 pandas 并使用 convert_objects 但这不起作用,因为 parquet 文件很大。

标签: pysparkazure-databricks

解决方案


您可以使用 StructType 定义架构,然后在加载数据时在架构选项中提供此架构。

from pyspark.sql.types import StructType, StructField, IntegerType, StringType, DoubleType
fileSchema = StructType([StructField('atm_id', StringType(),True),
                        StructField('atm_street_number', IntegerType(),True),
                        StructField('atm_zipcode', IntegerType(),True),
                        StructField('atm_lat', DoubleType(),True),
                        ])
df_raw_data = spark.read \
.option("header",True) \
.option("format", "parquet") \
.schema(fileSchema) \
.load(data_filename[5:])

推荐阅读