pyspark - Inferschema 检测列作为字符串而不是来自 pyspark 中镶木地板的双精度
问题描述
问题 - 我正在使用 azure databricks 在 pyspark 中读取镶木地板文件。有些列有很多空值并且有十进制值,这些列被读取为字符串而不是双精度。
有什么方法可以推断 pyspark 中的正确数据类型?
代码 -
要读取镶木地板文件 -
df_raw_data = sqlContext.read.parquet(data_filename[5:])
其输出是一个包含 100 多列的数据帧,其中大多数列的类型为 double,但 printSchema() 将其显示为字符串。
PS - 我有一个镶木地板文件,它可以有动态列,因此为数据框定义结构对我不起作用。我曾经将 spark 数据框转换为 pandas 并使用 convert_objects 但这不起作用,因为 parquet 文件很大。
解决方案
您可以使用 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:])
推荐阅读
- performance - ORB 与 FAST 检测器
- pdf - 使用 itext7 标记
- android - API 19 上的 Android nativeGetString 崩溃
- ios - 我需要持久存储成员 ID 和电子邮件以在 iOS 上的渐进式 Web 应用程序中恢复活动会话
- apache-spark - 如何在 RDD groupBy 之后运行 columnSimilarities
- plsql - 在plsql中检查for循环中的多个字符串
- java - 套接字未将 Android 连接到 pc tcp
- html - 网页问题自动播放音乐
- c# - 在 AutoFac 容器之间共享实例
- javascript - Unity3D - 错误提示意外符号“扩展”