Python spark save镶木地板的怪异行为

Python spark save镶木地板的怪异行为,python,pyspark,apache-spark-sql,databricks,Python,Pyspark,Apache Spark Sql,Databricks,在进行多次清理操作后,尝试将pyspark数据框编写为拼花地板时,我遇到了一个非常意外的行为。 我注意到,当我有多个阶段时,sparks只写很少的记录。 (输出文件只有5mb,大约21k行,而我预计大约有110M行,32gb的数据) 然而,在另一个实验中,我只是从csv加载数据帧,然后在没有任何清理的情况下写入它(仅1个阶段)。它写入完整的数据帧 仅供参考:我正在使用databricks并在azure blob存储上编写以下代码片段 df.write.mode("overwrite").opti

在进行多次清理操作后,尝试将pyspark数据框编写为拼花地板时,我遇到了一个非常意外的行为。 我注意到,当我有多个阶段时,sparks只写很少的记录。 (输出文件只有5mb,大约21k行,而我预计大约有110M行,32gb的数据)

然而,在另一个实验中,我只是从csv加载数据帧,然后在没有任何清理的情况下写入它(仅1个阶段)。它写入完整的数据帧

仅供参考:我正在使用databricks并在azure blob存储上编写以下代码片段

df.write.mode("overwrite").option("header", "true").format("com.databricks.spark.csv").save('path')

blob中的输出文件:


有什么解释或建议吗?

在写入拼花地板之前,数据帧的实际记录数是多少?尝试一个
df.count()
。顺便说一句,你的拼花输出是压缩的,所以大小应该比csv低很多。就在写之前,我有110M行。我发现这是列模式的问题,当我以字符串格式解析所有列时,它会毫无问题地写入所有列。但是,如果列具有混合类型(IntegerType、DateType…),我会得到这种行为。在保存为拼花地板之前,请检查
df.count
。正如我前面所述,在写入之前,计数操作会产生110M行。当我写拼花或csv时,问题出现了,当我将列类型转换为字符串时,问题消失了。我认为这是由于某些行中的空值,我面临类似的问题。我正在读取一个csv,其中一列有一些
NULL
s,Spark无法将其作为数字类型读取(导致数据帧中的所有值都为NULL)。将该列读取为
StringType
有效。在写入拼花地板之前,数据帧的实际记录数是多少?尝试一个
df.count()
。顺便说一句,你的拼花输出是压缩的,所以大小应该比csv低很多。就在写之前,我有110M行。我发现这是列模式的问题,当我以字符串格式解析所有列时,它会毫无问题地写入所有列。但是,如果列具有混合类型(IntegerType、DateType…),我会得到这种行为。在保存为拼花地板之前,请检查
df.count
。正如我前面所述,在写入之前,计数操作会产生110M行。当我写拼花或csv时,问题出现了,当我将列类型转换为字符串时,问题消失了。我认为这是由于某些行中的空值,我面临类似的问题。我正在读取一个csv,其中一列有一些
NULL
s,Spark无法将其作为数字类型读取(导致数据帧中的所有值都为NULL)。将该列读为
StringType
有效。