我正在将一个集合从 MongodB 导入到 Spark。所有文档都具有字段“数据”,该字段又是一个结构,并具有字段“配置名称”(始终为空)。
val partitionDF = spark.read.format("com.mongodb.spark.sql.DefaultSource").option("database", "db").option("collection", collectionName).load()
对于结果中的data列DataFrame,我得到这种类型:
StructType(StructField(configurationName,NullType,true), ...
当我尝试将数据框保存为 Parquet
partitionDF.write.mode("overwrite").parquet(collectionName + ".parquet")
我收到以下错误:
AnalysisException: Parquet 数据源不支持 struct<configurationName:null, ...
看起来问题是我把它NullType埋在了data列的类型中。我正在研究如何从 Spark 写入 parquet 时处理空值,但它只显示了如何NullType在顶级列上解决此问题。
NullType但是当 a不在顶层时,如何解决这个问题呢?到目前为止,我唯一的想法是完全展平数据框(爆炸数组等),然后所有的NullTypes 都会在顶部弹出。但在这种情况下,我会丢失数据的原始结构(我不想丢失)。
有更好的解决方案吗?