You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark创建DataFrame时LongType无法接受空字符串报错如何修复

问题修复方案

错误原因

你定义的Schema中col1、col2为Long数值类型,但原始数据中空值是字符串格式的"",Spark做类型转换时无法将字符串空值识别为合法的数值类型空值,因此抛出类型不匹配错误。

可选用的修复方法

  • 方法1:预处理pandas DataFrame,将空字符串替换为可被Spark识别的空值
import pandas as pd
import numpy as np

pandas_df = pd.DataFrame(example)
# 全局替换所有空字符串为NaN
pandas_df = pandas_df.replace("", np.nan)
# 再基于指定Schema生成Spark DataFrame
spark_df = spark.createDataFrame(pandas_df, schema = schema)

原理:pandas中的np.nan在转换为Spark DataFrame时会被自动识别为null,符合Schema中nullable=True的配置要求。

  • 方法2:跳过pandas中转,直接基于原始数据生成并转换
from pyspark.sql.functions import col, when

# 先读入原始数据,不指定Schema,此时空值列会自动识别为StringType
raw_df = spark.createDataFrame(example)
# 逐列做转换:空字符串转为null,非空值转换为Long类型
for field_name in schema.fieldNames():
    raw_df = raw_df.withColumn(
        field_name,
        when(col(field_name) == "", None).otherwise(col(field_name).cast(LongType()))
    )
spark_df = raw_df.select(*schema.fieldNames())

该方法适合数据量较大的场景,避免pandas单节点处理的内存瓶颈。

内容的提问来源于stack exchange,提问作者Alexex93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:54:04