Pyspark 柱型火花误差

Pyspark 柱型火花误差,pyspark,apache-spark-sql,spark-dataframe,pyspark-sql,Pyspark,Apache Spark Sql,Spark Dataframe,Pyspark Sql,我有一个名为“SupplierId”的数据帧列,输入为字符串,有很多数字,但也有一些字符。 (例如:['123'、'456'、'789'、…、'abc'])。 我使用 从pyspark.sql.types导入StringType df=df.withColumn('SupplierId',df['SupplierId'].cast(StringType()) 因此,我使用以下方法检查是否将其视为字符串: df.printSchema() 我得到: 根目录 |--SupplierId:字符串(

我有一个名为“SupplierId”的数据帧列,输入为字符串,有很多数字,但也有一些字符。 (例如:
['123'、'456'、'789'、…、'abc']
)。 我使用

从pyspark.sql.types导入StringType
df=df.withColumn('SupplierId',df['SupplierId'].cast(StringType())
因此,我使用以下方法检查是否将其视为字符串:

df.printSchema()
我得到:

根目录
|--SupplierId:字符串(nullable=true)
但是,当我试图转换为Pandas,或者只是使用
df.collect()
, 我得到以下错误:

调用o516.collectToPython时出错。:org.apache.spark.sparkeException:作业因阶段失败而中止:
阶段2.0中的任务0失败4次,最近一次失败:阶段2.0中的任务0.3丢失(TID 11,servername.ops.somecompany.local,executor 3):
ava.lang.RuntimeException:编码时出错:java.lang.RuntimeException:
将“CPD160001”解析为列“SupplierId”的IntegerType$时出现异常:
无法使用com.somecompany.spark.parsers.text.converts.IntegerConverter反序列化值。
正在反序列化的值为:CPD160001
因此Spark似乎将此列的值视为整数。 我曾尝试使用UDF强制转换为python中的字符串,但仍然不起作用。
你知道是什么导致了这个错误吗?

请分享你的实际数据样本,因为你的问题不能用玩具复制:

spark.version
#u'2.2.0'
从pyspark.sql导入行
df=spark.createDataFrame([Row(1,2,3'),
第(4,5,'a')行,
第(7,8,'9')行],
['x1','x2','id'])
df.printSchema()
#根
#|--x1:long(nullable=true)
#|--x2:long(nullable=true)
#|--id:string(nullable=true)
df.collect()
#[行(x1=1,x2=2,id=u'3'),行(x1=4,x2=5,id=u'a'),行(x1=7,x2=8,id=u'9')]
作为pd进口熊猫
df_pandas=df.toPandas()
大熊猫
#x1 x2 id
# 0  1  2  3
#1 4 5 a
# 2  7  8  9

当我调用df.printSchema()时,我有:root |--SupplierId:string(nullable=true),您应该添加关于
printSchema()的上述注释作为问题的一部分。您能否尝试创建一个?